关于单源最短路径的问题非常典型,这里没有给出分析与证明,仅仅给出了实现。
需要指出的是,许多实现仅给出了最短路径的长度,而没有给出“最短路径”,这里用给出了实现。
如程序中那样,定义一个数组p[N],其中p[i]代表“起始点v到顶点i的最短路径中,除i本身的最后一个顶点”,即着这条路径上i的前驱顶点,这个顶点随着“更多顶点的最短路径被求出”这个过程而变化。
当求出v到所有顶点的最短路径以后,同时也求出了最终的p[N]。于是可以按下列回溯的方法来求出每条最短路径序列:
对于顶点j,在其最短路径上其前驱pre = p[j],i=
1