现在我们来介绍指定一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”。例如求下图中的1号顶点到2、3、4、5、6号顶点的最短路径。
定义源点为1,dist[i]为源点1到顶点 i 的最短路径。其过程描述如下:
步骤 | dist[1] | dist[2] | dist[3] | dist[4] | dist[5] | dist[6] | 找到的集合 |
---|---|---|---|---|---|---|---|
第1步 | 0 | 1 | 12 | +∞ | +∞ | +∞ | {1,2} |
第2步 | × | × | 10 | 4 | +∞ | +∞ | {1,2,4} |
第3步 | × | × | 8 | × | 17 | 19 | {1,2,4,3} |
第4步 | × | × | × | × | 13 | 19 | {1,2,4,3,5} |
第5步 | × | × | × | × | × | 17 | {1,2,4,3,5,6} |
第6步 | × | × | × | × | × | × | {1,2,4,3,5,6} |
第 1 步:从源点 1 开始,找到与其邻接的点:2,3,更新dist[]数组,因 1 不与 4,5,6 邻接,故dist[4],dist[5],dist[6]为正无穷。在dist[]中找到最小值,其顶点为 2,即此时已找到1 到 2 的最短路。
第 2 步:从 {1,2} 开始,继续更新dist[]数组:
2 与 3 邻接,因1→2→4→3比dist[3]小,故更新dist[3] =1+9=10;
2 与 4 邻接,因1→2→4比dist[4]小,故更新dist[4]为 4;2 与 5,6不邻接,不更新。
在dist[]中找到最小值,其顶点为 4,即此时又找到 1 到 4 的最短路。
第 3 步:从 {1,2,4} 开始,继续更新dist[]数组:
4 与 3 邻接,因1→2→4→3比dist[3]小,故更新dist[3] =4+4=8;
4 与 5 邻接,因1→2→4→5比dist[5]小,故更新dist[5] =4+13=17;
4 与 6 邻接,因1→2→4→6比dist[6]小,故更新dist[6] =4+15=19;
在dist[]中找到最小值,其顶点为 3,即此时又找到 1 到 3 的最短路。
第 4 步:从 {1,2,4,3} 开始,继续更新dist[]数组:
3 与 5 邻接,因1→2→4→3→5比dist[5]小,故更新dist[5] =8+5=13。
在dist[]中找到最小值,其顶点为 5,即此时又找到 1 到 5 的最短路。
第 5 步:从 {1,2,4,3,5} 开始,继续更新dist[]数组:
5 与 6 邻接,因1→2→4→3→5→6比dist[6]小,故更新dist[6] =13+4=17。
第 6 步:所有点都已找到,停止。