Dijkstra算法始终会找到最短路径(在没有负边的图中),并且永远不会回溯。很容易对此进行推理。
始终选择最小值
考虑一个节点及其边缘(它只是大图的一部分):
6 _ 3 | / 14| /9 |/ 1-------2 7
Dijkstra的算法将开始选择边
1-2 (7)。我这样做是因为这是到目前为止所看到的最低要求。然后将最短路径的值设置为
2as
7。它永远不会再更改此值,因为从
1to的任何其他路径都
2必须更大(因为它必须以edge
1-3 (9)或之一开始
1-6 (14))。
将已知节点视为单个节点
推断接下来会发生什么的一种方法是假装算法将“已知”节点合并为一个节点。在此示例中,一旦
2选择了最短路径,它将合并
1并
2作为单个逻辑节点。所有走出的边
2均增加
7(到的最短路径
2)。下一步是选择从“超级节点”传出的最小边缘。然后,推理与第一步相同:
6 _ 3 | / 14| /9 |/ 1,2-------4 22
在此状态下,下一个选择的边为
1,2-3(9)。
3设置为的最短路径,
9现在考虑将其所有边缘选择下一个最小值(请注意边缘的更新方式
6以及如何
4更新):
6 | 11| | 1,2,3----4 20



