フロイドワーシャル法について
フロイドワーシャル法は基本的に以下のようなループで実装されています。
k: 経由する点 i: 始点 j: 終点 dp[i][j]は経路の距離を持った配列
c++
1 for(int k=0; k<n; k++) { 2 for(int i=0; i<n; i++) { 3 for(int j=0; j<n; j++) { 4 dp[i][j] = min(dp[i][j], dp[i][k]+dp[k][j]); 5 } 6 } 7 }
この通りの実装で任意の2頂点の最短経路が求められることは理解できるのですが、
わからない部分としてループの順序についてです。
なぜ経由するkを一番外側のループとして実装をするのでしょうか?
こうすればうまくいくからというのは理解できるのですが、なぜかと聞かれたときにはっきり答えが出ません。
youtube等で調べても見ましたがデモが多く、なぜこのようなループを書くかについてが理解できません。
ご存知の方がいましたらご教授ください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。