Dijkstra算法(记录路径)
与求最短路相比,增加一个path数组,来记录最短路的路径 先将path[i]=-1,之后每次找出最短路的点p后将path[j]=p 用path[j]=i表示从i到j最短路的路径 for(int j=1; j<=n; j++){ if(!visited[j] && dis[p]+mapp[p][j]<dis[j]){ dis[j]=dis[p]+mapp[p][j]; path[j]=p; } } 1339: 单源最短路径 时间限制: 1 Sec 内存限制: 128 MB 提交: 4 解决: 3 [ 提交 ][ 状态 ][ 讨论版 ][命题人: 外部导入 ] 题目描述 给定带权有向图G=(V,E),其中每条边的权是非负数。另外,还给定V中的一个顶点,称为源。现在要计算从源到所有其他各顶点的最短路径长度,这里路径的长度是指路径上各边权之和。这个问题通常称为单源最短路径问题(Single-Source Shortest Paths)。 如下图所示,就是要计算源点V1到其他各个顶点的最短距离,并输出相应的路径。 输入 本题有多组数据,第 1 行有 2 个数据 n 和 m ,其中 n 表示结点的个数, m 表示路径的数目。 接下来有 m 行,每行有 3 个数据 s,t 和 edge ,其中 s 表示路径的起点, t 表示路径的终点, edge 表示该路径的长度。 当 n=0 , m=0 时