DFSやBFSは「行けるかどうか」を調べる探索です。しかし、道に「重み(コスト)」がある場合、最短距離を求めるには別の方法が必要です。そこで登場するのが ダイクストラ法 です。
5つの都市を結ぶ道路があります。
| Node | A | B | C | D | E |
|---|---|---|---|---|---|
| A | - | 2 | 5 | - | - |
| B | 2 | - | 1 | 4 | - |
| C | 5 | 1 | - | 1 | 3 |
| D | - | 4 | 1 | - | 2 |
| E | - | - | 3 | 2 | - |
スタート:A ゴール:E
スタート:A ゴール:E
初期状態:
1. A確定(距離0)
2. B確定(距離2)
3. C確定(距離3)
4. D確定(距離4)
5. E確定(距離6)
最短距離:A→B→C→D→E = 6
function dijkstra(graph, start):
dist[] = ∞
dist[start] = 0
visited[] = false
while 未確定ノードがある:
u = 未確定で最小distのノード
visited[u] = true
for v in uの隣接ノード:
if dist[v] > dist[u] + cost(u,v):
dist[v] = dist[u] + cost(u,v)