a
j
W wierszu k (oprócz kk) zanotowane są łuki wychodzące OD wierzch. k
W kolumnie k (oprócz kk) zanotowane są łuki wchodzące DO wierzch. k
k
k
Rys. 5-3. Przykład oprogramowania algorytmu Warshalla-Floyda
dla rzadkich tablic IM i W.
Fragment procedury redukcji wierzchołków n..0 bez ich eliminacji wg algorytmu Warshalla - Floyda
for k:=n downto 0 do {k odpowiada numerowi wierzchołka redukcji}
for i:=n downto 0 do {i odpowiada łukowi skierowanemy DO wierz. k}
begin
if Im[i,k]='' then continue; { nie ma łuku skierowanego od i do k }
for j:=n downto 0 do {j odpowiada łukowi skierowanemy OD w. k}
begin
if (Im[k,j]='') OR (i=j) then continue; {łuki (ik),(kj) są zerowe lub symetr.}
Inc(Lij); { Lij - licznik nie zerowych par (ik),(kj) }
if ((Im[i,j]='') { tzn. nie ma „starego” łuku (i,j) }
OR (W[i,j] > W[i,k]+W[k,j])) { tzn. nowy łuk jest „tańszy” od starego }
then begin Inc(Lzn); {Lzn - licznik zapisów do tablic W, IM}
W[i,j]:= W[i,k]+W[k,j]; Im[i,j]:=Im[i,k]+Im[k,j];
{...tu drukujemy nowy łuk...}
end; {pętla zapisu oraz drukowania łuku}
end; {pętla po j}
end; {pętla po i}
IM: array [0..n, 0..n] of string [30];
W: array [0..n, 0..n] of double;
i,j<n; i≠j
n
n
n
n
2
0
0
IM (imie)
W (waga)
30
a=2
i
Tablicowa interpretacja digrafu
j
i
i
j