ダイクストラ法を完全に理解しているかどうか確認したい人は是非チャレンジして欲しいと思います。
目次
ここでは、図1に示すような7ノードからなるグラフを経路探索の対象とします。
ノードはカーナビゲーション地図中の交差点に相当します。ノードは丸で表されて
おり、中にノード番号が書いてあります。ノード0は目的地で、ここではノード0か
ら各ノードへの最短経路距離を求めます。
楕円で囲まれた記号は、ノード間を結ぶエッジを表します。エッジは地図中の道
路に相当します。(0-1)は、ノード0とノード1を結ぶエッジです。
![]() |
各エッジの長さ(ノード間距離)を次のように決めた時の、ダイクストラ法による
最短経路距離探索の手順を以下に示します。この例では、7ステップで探索が終了
します。
(0-1) 3 (0-2) 4 (0-3) 5 (1-3) 6 (1-4) 4 (2-3) 4 (2-5) 4 (3-4) 1 (3-5) 2 (3-6) 4 (4-6) 5 (5-6) 1 |
0. 全てのノードの、ゴールまでの距離を無限大(or 非常に大きな値)に初期化する ただし、ノード0のゴールまでの距離を0としておく(明らか) 1. 未確定ノードの中から、ゴールまでの距離が最小のノードを新たに確定する 確定済ノード(赤)に隣接していないノードは無限大の距離を持つため、自然と確定済ノード(赤)に隣接するノード(緑) の中から、確定することになる 2. 確定したノードaに隣接する全てのノードbiに対し、次のようにしてゴールまでの距離を更新する 1) biが確定済のノードなら何もしない 2) 確定ノードaのゴールまでの距離と、ノードaとノードbi間の距離を足した値を算出し、これをdとする 3) dがノードbiに設定されているのゴールまでの距離よりも小さい場合、dをbiのゴールまでの距離にする 3. 全てのノードが確定したら終り。そうでなければ1へ戻る |
![]() Step.1 |
![]() Step.2 |
![]() Step.3 |
![]() Step.4 |
![]() Step.5 |
![]() Step.6 |
![]() Step.7 | |