Dijkstra’s Algorithm(迪杰斯特拉算法)是求解最短路问题的一个经典算法。
本文通过一个简单的例子,举例说明其算法流程。
算法适用场景:非负网络
算例如下图所示:
iteration 1:
节点 | 标签 | 状态 |
---|---|---|
1 | [0, -] | 最优 |
2 | [100, 1] | 临时 |
3 | [30, 1] | 临时 |
iteration 2:
由于从起点(节点 1)出发所到达的节点中,节点 3 所行距离最短,故将节点 3 的状态更新为最优。
然后从节点 3 出发,继续迭代。
节点 | 标签 | 状态 |
---|---|---|
1 | [0, -] | 最优 |
2 | [100, 1] | 临时 |
3 | [30, 1] | 最优 |
4 | [30+10, 3] = [40, 3] | 临时 |
5 | [30+60, 3] = [90, 3] | 临时 |
iteration 3:
由于节点 4 只能由节点 3 直接到达,且节点 3 已经为最优状态,故将节点 4 的状态更新为最优。
然后从节点 4 出发,继续迭代。
节点 | 标签 | 状态 |
---|---|---|
1 | [0, -] | 最优 |
2 | [40+15, 4] = [55, 4] | 临时 |
3 | [30, 1] | 最优 |
4 | [40, 3] | 最优 |
5 | [90, 3] 或 [40+50, 4] = [90, 3 或 4] | 临时 |
iteration 4:
由于节点 2 和节点 5 的所有前序节点均为最优状态,故将所有节点的状态更新为最优,算法运行结束。
节点 | 标签 | 状态 |
---|---|---|
1 | [0, -] | 最优 |
2 | [55, 4] | 最优 |
3 | [30, 1] | 最优 |
4 | [40, 3] | 最优 |
5 | [90, 3 或 4] | 最优 |
参考文献:
Hamdy A. Taha. Operations Research an Introduction 初级篇 Chapter 6