var a: array[1..maxn, 1..maxn] of Integer; b: array[1..maxn] of Integer; {b[i]指顶点i到源点的最短路径} mark: array[1..maxn] of Boolean; procedure bhf; var best, best_j: Integer; begin FillChar(mark, SizeOf(mark), false); mark[1] := true; b[1] := 0;{1为源点} repeat best := 0; for i := 1 to n do if mark[i] then {对每一个已计算出最短路径的点} for j := 1 to n do if (not mark[j]) and (a[i, j] > 0) then if (best = 0) or (b[i] + a[i, j] < best) then begin best := b[i] + a[i, j]; best_j := j; end; if best > 0 then begin b[best_j] := best;mark[best_j] := true; end; until best = 0; end; //delphi/6606