标签:path 算法 pre str jks isp mat 路径 max
Dijkstra算法
void Dijkstral(MatGraph g, int v) { int i, j, u; int mindist; int path[MAXV], dist[MAXV], S[MAXV]; for (i = 0; i < g.n; i++) { S[i] = 0; dist[i] = g.edges[v][i]; if (g.edges[v][i] < INT_MAX) path[i] = v; else path[i] = -1; } S[v] = 1; path[v] = 0; for (i = 1; i < g.n; i++) { mindist = INT_MAX; for (j = 0; j < g.n; j++) { if (S[j] == 0 && dist[j] < mindist) { u = j; mindist = dist[j]; } } S[u] = 1; for (j = 0; j < g.n; j++) { if (S[j] == 0) { if (g.edges[u][j] < INT_MAX && dist[u] + g.edges[u][j] < dist[j]) { dist[j] = dist[u] + g.edges[u][j]; path[j] = u; } } } } Dispath(g, dist, path, S, v); }
void Dispath(MatGraph g, int dist[], int path[], int S[], int v) { int i, j, k; int apath[MAXV], d; for (i = 0; i < g.n; i++) { if (S[i] == 1 && i != v) { printf("顶点%d到顶点%d的路径长度为:%d\t路径为:",v, i, dist[i]); d = 0; apath[d] = i; k = path[i]; if (k == -1) printf("无路径\n"); else { while (k != v) { apath[++d] = k; k = path[k]; } apath[++d] = v; printf("%d", apath[d]); for (j = d - 1; j >= 0; j--) printf(",%d", apath[j]); printf("\n"); } } } }
标签:path 算法 pre str jks isp mat 路径 max
原文地址:https://www.cnblogs.com/KIROsola/p/11854512.html