thuật toán tìm đường đi dài nhất

4 2.9K 16
thuật toán tìm đường đi dài nhất

Đang tải... (xem toàn văn)

Thông tin tài liệu

Một số thuật toán Trên đồ thị có hướng chu trình  Bài toán 1: +Cho đồ thị có hướng k có trọng số k có chu trình.hãy tìm đường dài đồ thị (qua nhìu cạnh/đỉnh ) +Thuật toán (Đánh mức) : gọi k mức đỉnh ; K:=0; Repeat K:=K+1; Tìm đỉnh trọc( đỉnh k có đường tới đỉnh khác) gán mức cho k; Xóa đỉnh gán mức cung vào Until; (*) Ý nghĩa : mức đỉnh độ dài đường dài đỉnh i ; Đường dài đường xuất phát từ đỉnh có mức cao nhất; (*) Tìm đường dài +Cách : vào mức đỉnh để in ; Repeat For i:=1 to n If muc[i]=k then Begin Write(i,’ ‘); Break; End; Dec(k); Until k=0; Cách : dùng mảng sau[i] để lưu lại đỉnh trọc I, trình xóa đỉnh trọc cung vào  Code pascal  const f1='danhmuc.inp'; f2='danhmuc.out'; var n,k,dem:longint; m:array[1 100000,1 100000] of longint; muc,ra:array[1 100000] of longint; t1,t2:text; procedure nhap; var i,j:longint; begin assign(t1,f1); reset(t1); read(t1,n); for i:=1 to n begin for j:=1 to n begin read(t1,m[i,j]); ra[i]:=ra[i]+m[i,j]; end; readln(t1); end; close(t1); end; procedure xuli; var i,j:longint; begin k:=0;dem:=0; fillchar(muc,sizeof(muc),0); repeat; inc(k); for i:=1 to n if (ra[i]=0) and(muc[i]=0) then begin muc[i]:=k; inc(dem); end; for i:=1 to n if muc[i]=k then for j:=1 to n if m[j,i]=1 then dec(ra[j]); until dem=n; end; procedure xuat; var i,j:longint; begin assign(t2,f2); rewrite(t2); for i:=k downto for j:=1 to n if muc[j]=i then begin write(t2,j,' '); break; end; close(t2); end; begin nhap; xuli; xuat; end

Ngày đăng: 08/12/2015, 22:02

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan