该算法维护了一组顶点, 这些顶点的顶点到源的最短路径是已知的。该图由其成本邻接矩阵表示, 其中成本是边缘的权重。在图的成本邻接矩阵中, 所有对角线值均为零。如果没有从源顶点Vs到任何其他顶点Vi的路径, 则用+∞表示。在此算法中, 我们假设所有权重均为正。
- 最初, 集合中没有顶点。
- 在S中包括源顶点Vs。确定从Vs到所有其他顶点的所有路径, 而无需经过任何其他顶点。
- 现在, 在最接近Vs的S中包含该顶点, 并找到通过该顶点到达所有顶点的最短路径并更新值。
- 如果图中有n个顶点, 请重复执行该步骤, 直到S中不包含n-1个顶点。
示例:使用Dijkstra算法在图所示的图中找到K和L之间的最短路径。
解:
步骤1:包括顶点K为S, 并确定从K到所有其他顶点的所有直接路径, 而不经过任何其他顶点。
到所有其他顶点的距离
S | K | a | b | c | d | L |
K | 0 | 4(K) | ∞ | 2(K) | ∞ | 20(K) |
到所有其他顶点的距离
S | K | a | b | c | d | L |
K | 0 | 3(K, c) | 7(K, c) | 2(K) | 8(K, c) | 18(K, c) |
到所有其他顶点的距离
S | K | a | b | c | d | L |
K | 0 | 3(K, c) | 7(K, c) | 2(K) | 7(K, c, a) | 18(K, c) |
到所有其他顶点的距离
S | K | a | b | c | d | L |
K | 0 | 3(K, c) | 7(K, c) | 2(K) | 7(K, c, a) | 8(K, C, B) |
到所有其他顶点的距离
S | K | a | b | c | d | L |
K(c, a, b, d) | 0 | 3(K, c) | 7(K, c) | 2(K) | 7(K, c, a) | 8(K, C, B) |