Nevíte, jak vybrat nejkratší cestu z vašeho místa do cíle?. Pak byste měli znát tento algoritmus.
Floyd-Warshallův algoritmus se používá k nalezení nejkratších cest mezi všemi dvojicemi vrcholů v grafu, kde každá hrana v grafu má váhu, která je kladná nebo záporná.
Největší výhodou použití tohoto algoritmu je, že všechny nejkratší vzdálenosti mezi libovolnými 2 vrcholy lze vypočítat v čase O(V3), kde V je počet vrcholů v grafu.
Algoritmus Floyd-Warshall se také nazývá Floydův algoritmus, Roy-Floydův algoritmus, Roy-Warshallův algoritmus nebo algoritmus WFI.
Tento algoritmus používá k nalezení nejkratších cest přístup dynamického programování.
Algoritmus
Pro graf s N vrcholy:
Krok 1: Inicializujte nejkratší cesty mezi libovolnými 2 vrcholy pomocí nekonečna.
Krok 2: Najděte všechny párové nejkratší cesty, které používají 0 mezilehlých vrcholů, pak najděte nejkratší cesty, které používají 1 mezilehlý vrchol, a tak dále… až do použití všech N vrcholů jako mezilehlých uzlů.
Krok 3: Minimalizujte nejkratší cesty mezi libovolnými 2 dvojicemi v předchozí operaci.
Krok 4: Pro libovolné 2 vrcholy (i,j) , je třeba vlastně minimalizovat vzdálenosti mezi touto dvojicí pomocí prvních K uzlů, takže nejkratší cesta bude: min(dist+dist,dist).
dist představuje nejkratší cestu, která využívá pouze prvních K vrcholů, dist představuje nejkratší cestu mezi dvojicí k,j. Jako nejkratší cesta bude sloučena nejkratší cesta z i do k, pak z k do j.
for(int k = 1; k <= n; k++){ for(int i = 1; i <= n; i++){ for(int j = 1; j <= n; j++){ dist = min( dist, dist + dist ); } } }