ワーシャル-フロイド法
ワーシャル-フロイド法とは
ワーシャル-フロイド法は、ダイクストラ法のように単一始点最短経路問題を解くアルゴリズムではなく、全点間最短経路問題を解くアルゴリズムである。
ワーシャル-フロイド法は全点間の最短距離を保持しており、負のパスが存在した場合は、[i][j]
として i から j までの最短距離を持つ配列でデータを管理していた場合に、i と j が一致する時は同じ頂点を移動しているので、最短距離は 0 となるが負となる。そのため、[i][i]
が負であるかを 確認することで負の経路が存在するか確認することができる。
アルゴリズム
流れ
始点・中継点・終点の全てのパターンを確認することで全点間の最短経路を求めている。
ダイクストラ法で使用したものを同じグラフを考える。
初めに、与えられたパスから各頂点への最短経路を記録した表を作成する。与えられてたパス以外の最短経路は無限(図では INF として表現する)とする。また、始点と終点が一致している場合は 0 とする。
初めに、中継点を 0 とし、全頂点の始点・終点の組み合わせを考えていく。例えば、1 2 の経路を考える際 に、 1 2 の経路と 1 0 + 0 2 のように頂点 0 を経由して向かう経路のどちらがコストが低いかを確認する。
1 0 + 0 2 の経路方がコストが低いので最短経路表の 1 2 の部分のコストを更新する。
全ての経路を確認すると最短経路表は次の様になる。
同様に、次は頂点 1 を中継点として考えると次の様になる。
同様に、次は頂点 2 を中継点として考えると次の様になる。
同様に、次は頂点 3 を中継点として考えると次の様になる。