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