Cài đặt thuật toán tìm chu thành phần liên thông bằng chương trình Pascal
Bạn đang xem nội dung tài liệu Cài đặt thuật toán tìm chu thành phần liên thông bằng chương trình Pascal, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
CÀI ĐẶT THUẬT TOÁN TÌM CHU THÀNH PHẦN LIÊN THÔNG BẰNG CHƯƠNG TRÌNH PASCAL Thành phần liên thông. Chương trình xác định các thành phần liên thông. Dữ liệu được lấy từ tệp TPLT.INP là ma trận : n m x1 y1 x2 y2 . . . . . . xm ym Trong đó, n số đỉnh, m là số cạnh Sau khi lấy dữ liệu, chương trình sẽ xác định các thành phần liên thông và lưu vào tệp TPLT.OUT có cấu trúc: k x1 x2 … y1 y2 … … …. … z1 z2 … Trong đó, k số tplt. x1,x2… là các đỉnh tplt thứ 1 y1,y2… là các đỉnh tplt thứ 2 … z1,z2… là các đỉnh tplt thứ k Chương trình: (TPLT.PAS) program lien_thong; const maxv =100; type link =^node; node= record v:integer; next:link; end; var m,n,v,u,d,d1:integer; ke:array[1..maxv] of link; t:link; a:array[1..maxv] of boolean; f,f1:text; PROCEDURE input; var i,x,y:integer; begin assign(f1,'tplt.inp');reset(f1); while not eof(f1) do begin readln(f1,n,m); for i:=1 to n do ke[i]:=nil; for i:=1 to m do begin readln(f1,x,y); new(t);t^.v:=x; t^.next:=ke[y]; ke[y]:=t; new(t);t^.v:=y; t^.next:=ke[x]; ke[y]:=t; end; end; close(f1); End; procedure tplt; var i:integer; Begin d1:=0; for i:=1 to n do begin t:=ke[i]; a[i]:=false; d:=0; while (tnil) do begin inc(d); if (a[t^.v]=false)and(d0) then a[t^.v]:=true; t:=t^.next; end; if d=0 then inc(d1); end; End; PROCEDURE output; var i,d:integer; begin assign(f,'tplt.out'); rewrite(f); write(f,' ',d1); for i:=1 to n do begin t:=ke[i]; a[i]:=false; d:=0; while (tnil) do begin inc(d); if (a[t^.v]=false) and (d0) then begin a[t^.v]:=true; write(f,' ',t^.v); end; t:=t^.next; end; if d=0 then begin writeln(f); write(f,' ',i); end; end; close(f); End; BEGIN input; tplt; output; END. File vào ví dụ: (TPLT.INP) 5 4 1 2 2 3 1 3 4 5 File ra tương ứng: (TPLT.OUT) 2 1 2 3 4 5
File đính kèm:
- Cai dat thuat toan xac dinh cac thanh phan lien thong bang Pascal.doc