最短路径算法求助
要用Dijkstra算法,怎样把最终的 最短路径都经过 哪些点 也输出出来呀?
比如:最终节点v1到节点v3的最短路径是9,通过的路径是v1 -> v2 -> v3,v2怎么在程序中保存啊?
v1,v2 ... v6之间的邻接关系为:
v1 v2 v3 v4 v5 v6v1 INFINITY, 5, INFINITY, 7, INFINITY, INFINITY,v2 INFINITY, INFINITY, 4, INFINITY, INFINITY, INFINITY,v3 8, INFINITY, INFINITY, INFINITY, INFINITY, 9,v4 INFINITY, INFINITY, 5, INFINITY, INFINITY, 6,v5 INFINITY, INFINITY, INFINITY, 5, INFINITY, INFINITY,v6 3 INFINITY, INFINITY, INFINITY, 1, INFINITY
struct{ VertexTypevexs[MAX_VERTEX_NUM]; //顶点向量 int arcs[][]; //邻接矩阵 Int vexnum,arcnum; //图的当前顶点数和弧数 }MGraph;
void shortestpath (MGraph g,int v,pathmatrix &p,shortpathtable &d)
#include <iostream>using namespace std; const int maxint = 32767;const int maxnode = 101;int dis[maxnode];int c[maxnode][maxnode];int prev[maxnode];int n, line;void dijkstra(int n, int v, int *prev, int dis[maxnode], int c[maxnode][maxnode]);void searchPath(int *prev,int v, int u);void main(){ cin >> n; cin >> line; int p, q, len; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { c[i][j] = maxint; } } for (i = 1; i <= line; ++i) { cin >> p >> q >> len; if (len < maxint) { c[p][q] = len; c[q][p] = len; } } for (i = 1; i <= n; ++i) { dis[i] = maxint; } dijkstra(n, 1, prev, dis, c); cout << dis[n] << endl; searchPath(prev, 1, n);}void dijkstra(int n, int v, int *prev, int dis[maxnode], int c[maxnode][maxnode]){ bool s[maxint]; for (int i = 1; i <= n; ++i) { s[i] = 0; dis[i] = c[v][i]; if (dis[i] < maxint) { prev[i] = v; } else { prev[i] = 0; } } s[v] = 1; dis[v] = 0; for (i = 2; i <= n; ++i) { int temp = maxint; int u; for (int j = 1; j <= n; ++j) { if (!s[j] && dis[j] < temp) { u = j; temp = dis[j]; } } s[u] = 1; for (j = 1; j <= n; ++j) { int newdis = dis[u] +c[u][j]; if (newdis < dis[j]) { dis[j] = newdis; prev[j] = u; } } }}void searchPath(int *prev,int v, int u){ int que[maxnode]; int tot = 1; que[tot] = u; tot++; int tmp = prev[u]; while(tmp != v) { que[tot] = tmp; tot++; tmp = prev[tmp]; } que[tot] = v; for(int i=tot; i>=1; --i) if(i != 1) cout << que[i] << " -> "; else cout << que[i] << endl;}