ダイクストラ法
ダイクストラ法とは グラフのすべての頂点に対して、ある頂点からの最短距離を求めるアルゴリズム。 辺のコスト (距離) は非負である必要がある。 例えば、こんなグラフから、 このように、頂点 0 からの距離 d を求められる。 ダイクストラ法のアルゴリズム スタート地点の頂点からその頂点自身への距離は 0 で最短距離として確定し、その頂点を u とおく。それ以外の頂点の距離は無限大としておく。 すべての頂点への最短距離が確定するまで、以下の操作を繰り返す。 u からの辺がある、すべての頂点 v の距離を、[v の距離] と [(u の距離) + (辺 (u → v))] のうち小さいほうに更新する。 確定していない頂点のうち、距離が最も小さいものを最短距離として確定し、その頂点を u とおく。 例と証明っぽいやつ ダイクストラ法の動き (GIF) 説明 スタート地点を頂点 0 とする。 辺のコストは 0 以上なので、スタート地点の最短距離は 0 で確定する。 頂点 0 から 1 ステップ (1 回の移動) で行ける頂点 (頂点 1、頂点 2) の距離を更新する。 (頂点 1: (初期値: ∞) → (頂点 0 の最短距離: 0) + (頂点 0 から 頂点 1 への辺のコスト: 2) = 2) (頂点 2: ∞ → 0 + 7) この時点で、確定していない頂点 1 ~ 4 のうち、距離が最小の頂点、頂点 1 を最短距離と確定できる。 ( 証明的なやつ: 今、頂点 0 から 1 ステップで行ける経路の探索をした。それ以外で、頂点 1 にたどり着くには、頂点 0 から 2 ステップ以上移動しなくてはならない。頂点 0 から 1 ステップ移動するときの最短距離は、頂点 1 に行く場合で、距離は 2 である。辺のコストは非負なので、2 ステップ移動する距離は 2 以上だとわかる。なので、頂点 1 の距離 2 は最短距離であるとわかる。) 次は、新たに確定した頂点、頂点 1 から 1 ステップで行ける頂点の距離を更新する。 (頂点 2: 7 ≦ 2 + 6 なので変化なし、頂点 3: ∞ → 2 + 2) この時点で、確定していない頂点 2 ~ 4 のうち、距離が最小の頂点、頂点 3 を最短距離と確定できる。 ( 証明...