|
Consider?m un graf orientat G=(X,U) cu n noduri, în care fiec?rui arc îi este asociat un num?r întreg numit cost. Semnifica?ia acestui cost poate fi foarte variat?, în func?ie de domeniul pe care îl descrie graful. De exemplu, dac? graful reprezint? harta unui ora? în care arcele sunt str?zile iar nodurile sunt intersec?iile dintre st?yi, atunci putem vorbi despre costul deplas?rii unui automobil între dou? intersec?ii, de-a lungul unei str?zi. Acesta s-ar putea m?sura în cantitatea de benzin? consumat?, calculat? prin prisma lungimii str?zii în m sau in km.
Pentru eviden?ierea costurilor tuturor arcelor unui graf cu n noduri se poate defini o matrice a, cu n linii *n coloane.exist? dou? forme ale acestei matrici:
Forma a): Fiecare element a[i,j] poate fi:
-c, dac? exist? un arc de cost c>0 între nodurile i ?i j;
-0, dac? i=j;
-+?, dac? nu exist? arc între nodurile i ?i j.
Forma b): Este absolut similar?, cu singura deosebire c? în loc de +? avem -?.
Forma a)se folose?te pentru determinarea drumurilor de cost minim între dou? noduri, iar forma b) este utilizat? în aflarea drumurilor de cost maxim.
Dac? dorim s? citim matricea costurilor, evident c? nu putem introduce de la tastatur? “+?”! În loc de “+?” vom da un num[r de la tastatur? foarte mare.
Problema determin?rii drumului minim/ maxim între dou? noduri face obiectul algoritmului urm?tor.
Algoritmul Roy-Floyd
Se consider? un graf orientat cu n noduri, pentru care se d? matricea costurilor în forma a). Se cere ca, pentru fiecare pereche de noduri (i, j), s? se tip?reasc? costu drumului minim de la i la j.
Plec?m de la urm?toarea idee: dac? drumul minim între dou? noduri oarecare i ?i j trece printr-un nod k, atunci drumurile de la i la k ?i de la k la j sunt la rândul lor minime. Pentru fiecare pereche de noduri (i, j ), cu i, j ?{1,2,…,n}, proced?m astfel:
• D?m lui k pe rând valorile 1,2,…,n, pentru ca nodul k despre care vorbeam mai sus poate fi, cel pu?in teoretic, orice nod al grafului. Pentru fiecare k:
? dac? suma dintre costul drumului de la i la j ?i costul drumului de la k la j este mai mic? decât costul drumului de la i la j {a[i, k]+a[k, j]
|