Thuật toán về quan hệ tiếp xúc

C

cuong276

[TẶNG BẠN] TRỌN BỘ Bí kíp học tốt 08 môn
Chắc suất Đại học top - Giữ chỗ ngay!!

ĐĂNG BÀI NGAY để cùng trao đổi với các thành viên siêu nhiệt tình & dễ thương trên diễn đàn.

Để nắm bắt được tình hình lây nhiễm ở 1 vùng dân cư bị bệnh truyền nhiễm, người ta chia các cư dân sinh sống trong vùng đó thành 3 nhóm và tìm hiểu mức độ quan hệ tiếp xúc. Nhóm thứ nhất gồm K người đã bị mắc bệnh. Nhóm thứ 2 gồm L người. Quan hệ tiếp xúc của các cư dân giữa nhóm thứ nhất và nhóm thứ 2 được thể hiện bơi bảng A có K hàng và L cột. Giá trị ở vị trí hàng i (1\leq i \leq K ) , cột j ( 1 \leq j \leq L ) của bảng A sẽ bằng 1 nếu người thứ i trong nhóm thứ nhất có tiếp xúc với người thứ j trong nhóm thứ 2; bằng 0 nếu ngược lại. Nhóm thứ 3 gồm M người và quan hệ tiếp xúc của các cư dân giữa nhóm thứ 2 và nhóm thứ 3 được thể hiện bởi bảng B gồm L hàng và M cột. Giá trị ở vị trí hàng i ( 1 \leq i \leq L ) , cột j ( 1 \leq j \leq K ) của bảng B bằng 1 nếu người thứ i trong nhóm thứ 2 có tiếp xúc với người thứ j trong nhóm thứ 3 ; bằng 0 nếu ngược lại. Em hãy giúp các bác sĩ thiết lập bảng thông tin mô tả quan hệ gián tiếp giữa nhóm người thứ nhất và nhóm người thứ 3 qua nhóm người thứ 2, biết rằng tại hàng i , cột j của bảng này bằng 1 nếu người thứ i trong nhóm người thứ nhất có tiếp xúc với người thứ j của nhóm người thứ 3 qua 1 người nào đó của nhóm người thứ 2 ; bằng 0 nếu ngược lại.
Dữ liệu vào: Tệp văn bản QUANHE.INP có cấu trúc:
- dòng đầu tiên ghi 2 số nguyên dương K và L ( K,L \leq 100 ).
- K dòng tiếp theo, mỗi dòng ghi L số 0 hoặc 1 là các giá trị của bảng A.
- Dòng tiếp theo ghi số nguyên dương M ( M \leq 100 ).
- L dòng tiếp theo, mỗi dòng ghi M số 0 hoặc 1 là các giá trị của bảng B.
- Các số ghi trên mỗi dòng cách nhau ít nhất 1 kí tự trống.
Dữ liệu ra: Tệp văn bản QUANHE.OUT chứa bảng thông tin mô tả quan hệ gián tiếp giữa nhóm người thứ nhất và nhóm người thứ 3 thông qua nhóm người thứ 2.
Ví dụ:
Tệp QUANHE.INP
2 3
1 1 0
0 1 0
4
1 0 0 1
0 1 0 1
0 0 1 0
Tệp QUANHE.OUT
1 1 0 1
0 1 0 1
 
Q

quanghero100

Mã:
uses crt;
var a,b,c:array[1..100,1..100] of byte;
    i,j,z,k,l,m:integer;
    f1,f2:text;
begin
   assign(f1,'QUANHE.INP');
   reset(f1);
   readln(f1,k,l);
   for i:=1 to k do
      begin
          for j:=1 to l do
             read(f1,a[i,j]);
          readln(f1);
      end;
   readln(f1,m);
   for i:=1 to l do
      begin
         for j:=1 to m do
            read(f1,b[i,j]);
         readln(f1);
       end;
   close(f1);
   assign(f2,'QUANHE.OUT');
   rewrite(f2);
   fillchar(c,sizeof(c),0);
   for i:=1 to k do
      for j:=1 to l do
         for z:=1 to m do
            if (a[i,j]=1) and  (b[j,z]=1) then c[i,z]:=1;
   for i:=1 to k do
      begin
         for j:=1 to m do
            write(f2,c[i,j],' ');
         writeln(f2);
      end;
   close(f2);
end.
 
Q

quanghero100

câu lệnh đó có nghĩa là gán tất cả các phần tử của mảng C bằng 0 (chỉ là khởi tạo thôi)
 
C

cuong276

Vậy bạn có thể giải thích kĩ về thuật toán được không? Mình đọc kĩ đề rồi nhưng không tài nào nghĩ ra được thuật toán
 
Q

quanghero100

Về cái đề cậu chỉ cần nhìn cái ví dụ là sẽ rõ à mãng A kích thước là K*L mãng B kích thước là L*M mãng C kích thước K*M từ kích thước của 3 mãng đó cậu sẽ thấy mối quan hệ và suy ra được thuật toán thôi
 
Top Bottom