ダイクストラ法を理解しよう

1. なぜダイクストラ法が必要?

DFSやBFSは「行けるかどうか」を調べる探索です。しかし、道に「重み(コスト)」がある場合、最短距離を求めるには別の方法が必要です。そこで登場するのが ダイクストラ法 です。

2. 接続リスト(表に基づく)

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

3. アルゴリズムの基本アイデア

4. 例題と手順(更新理由付き)

スタート:A ゴール:E

初期状態:

手順詳細

1. A確定(距離0)

2. B確定(距離2)

3. C確定(距離3)

4. D確定(距離4)

5. E確定(距離6)

最短距離:A→B→C→D→E = 6

5. 擬似コード

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)

まとめ