Algoritmus és adatszerkezet Tavaszi félév Tóth Norbert1 Floyd-Warshall-algoritmus Legrövidebb utak keresése
Kiindulópontja a legrövidebb utak mátrixszorzáson alapuló algoritmusától eltérő jellemzése. Dinamikus programozásunk a legrövidebb utak „belső” csúcsait tekinti, ahol egy egyszerű p= út belső csúcsa p minden v 1 -től és v l -től különböző csúcsa, azaz a {v 2, v 3,..., v l } halmaz minden eleme.
Irányított gráf:
Legrövidebb utak: i k j P: belső csúcsok {1, 2,..., k}-ból
0 3 8 ∞ -4 ∞ 0 ∞ 1 7 D (0) = ∞ 4 0 ∞ ∞ 2 ∞ -5 0 ∞ ∞ ∞ ∞ ∞ -4 ∞ 0 ∞ 1 7 D (1) = ∞ 4 0 ∞ ∞ ∞ ∞ ∞ ∞ 0 ∞ 1 7 D (2) = ∞ ∞ ∞ ∞ ∞ 0 ∞ 1 7 D (3) = ∞ ∞ ∞ ∞ 6 0
D (4) = D (5) =
Pszeudo kód: int path[][]; procedure FloydWarshall () for k := 1 to n for i := 1 to n for j := 1 to n path[i][j] = min ( path[i][j], path[i][k]+path[k][j] );