单源最短路径 dijkstra 单源最短路径 dijkstra 关于单源最短路径的问题非常典型,这里没有给出分析与证明,仅仅给出了实现。 需要指出的是,许多实现仅给出了最短路径的长度,而没有给出“最短路径”,这里用给出了实现。 如程序中那样,定义一个数组p[N],其中p[i]代表“起始点v到顶点i的最短路径中,除i本身的最后一个顶点”,即着这条路径上i的前驱顶点,这个顶点随着“更多顶点的最短路径被求出”这个过程而变化。 当求出v到所有顶点的最短路径以后,同时也求出了最终的p[N]。于是可以按下列回溯的方法来求出每条最短路径序列: 对于...
2 using namespace std; 3 #define N 5 4 #define MAX 65535 5 int g[N][N]; 6 void min_path(int v,long *d,int *p) 7 { 8 int i = 0; 9 int j = 0; 10 bool s[N]={false}; 11 for(i=0;id[k]+g[k][j]) 47 { 48 d[j] = d[k] + g[k][j];//更新其他在V中的顶点的最短距离。 49 p[j] = k; 50 } 51 } 52 } 53 } 54 int main() 55 { 56 long d[N]; 57 int p[N];//p[i]代表到达顶点i的最短路径的前驱节点,随着路径变化而变 化 58 int i = 0; 59 for(i = 0;i >g[i][j]; 63 } 64 min_path(0,d,p); 65 for( i =0;i