过程
假设上图中的顶点代表各个城市,每条边的权值代表城市间的路程长度。0->5 表示可以从城市 0 直达城市 5,路程长度 10;0->2->3->5 代表可以经过城市 2,3 到达城市 5,路程长度 7。
你想要找到从城市0到城市5的最短路程,或者从城市0到其余各个城市的最短路程。这就是单源最短路径问题:给定带权图G和源点v,求从v到图G中其余各顶点的最短路径。
如何求得这些路径?迪杰斯特拉(Dijkstra)提出了一个按路径长度递增的次序产生最短路径算法。(条件:所有边的权值为正。)
-
用一个数组D记录源点到各点的最短路径长度。假设源点为 0 (出发点),则D[3]表示从点0到点3的当前的最短路径长度。
-
数组D的初始状态:源点0到自身的距离为0,D[0]= 0;若源点0到其余顶点i有边,则D[i]为边的权值;否则D[i]为∞,表示没有直达路径;上图初始状态: