W : array[1..MaxN, 1..MaxN] of longint; //таблиця найкоротших шляхів
function Min(a, b : longint) : longint;
begin
if a < b then min := a else min := b;
end;
procedure floyd(A : Matrix; N : integer);
var i, j, k : integer;
begin
for i := 1 to N do for j := 1 to N do W[i, j] := A[i, j]; //копіюємо матрицю суміжності в таблицю відстаней
for k := 1 to N do //перебираємо всі набори вершин(1),(1,2),(1,2,3)...(1,2,3..N)
for i := 1 to N do
for j := 1 to N do W[i,j] := min(W[i, j], W[i, k] + W[k, j]); //возможності два варіанти: найкоротша відстань від i до j проходить через вершину k чи ні.
end;