Sunteți pe pagina 1din 2

Algoritmul Roy Floyd determina costul minim al drumului dintre oricare doua vrfur

i x, y, precum si un astfel de drum.


Initial se porneste de la matricea costurilor C (definita n Reprezentarea Informa
tiilor), care va fi transformata n matricea drumurilor de cost minim astfel: se c
onsidera un vrf k (k=1,n) si pentru fiecare k (pe harta va fi redat printr-un avi
on rosu, iar sub forma de graf asociat ca un vrf portocaliu), se compara costul d
rumului, din acel moment, dintre i si j (i,j=1,n), drum ale carui arce vor fi co
lorate cu rosu, cu suma costurilor dintre drumul (i,k)si drumul (k,j), drumuri c
e vor fi colorate cu verde; n cazul n care costul drumului (i,j) ce trece prin k (
cel verde) este mai mic dect drumul existent deja (cel rosu) nseamna ca am gasit u
n nou drum de cost mai mic ntre vrfurile i si j, trecnd prin k. n cazul acesta costu
l drumului de la i la j va fi suma costurilor drumului de la i la k cu drumul de
la k la j, iar tata[i][j] va fi tata[k][j] (se va reactualiza si vectorul tata p
entru a putea reconstitui drumul minim).
Dupa finalizarea algoritmului de mai sus : costul minim al drumului (i,j) este r
etinut n C[i][j], iar pentru a reconstitui acest drum citeste drum.
pseudocod:
roy_floyd ()
{
i, j, k
pentru k = 1,n executa
pentru i = 1,n executa
pentru j = 1,n executa
daca C[i][k]<>INF si C[k][j]<>INF atunci
daca C[i][j]>C[i][k]+C[k][j] atunci
{
C[i][j] <- C[i][k] + C[k][j]
tata[i][j] <- tata[k][j]
}
}
pascal:
procedure roy_floyd ()
var i, j, k: integer;
begin
for k := 1 to n do
for i := 1 to n do
for j := 1 to n do
if (C[i][k]<>INF) and (C[k][j]<>INF) then
if (C[i][j]>C[i][k]+C[k][j]) then

begin
C[i][j] := C[i][k]+C[k][j];
tata[i][j] := tata[k][j];
end;
end;