#include <limits.h> #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct a{ int vexnum; int arcnum; int arc[5][5]; }MGraph; typedef struct b { char temp[5][5]; }PathMatrix; void Shortest_DIJ(const MGraph * G ,const int v0,PathMatrix * P,int *D) { int v, w, i,j, min; char final[5]; for (v = 0;v < G->vexnum; ++v) { final[v] = 0; D[v] = G->arc[v0][v]; for (w = 0 ;w < G->vexnum; ++w) P->temp[v][w] = 0; if (D[v] < INT_MAX) { P->temp[v][v0] = 1; P->temp[v][v] = 1; } } D[v0] = 0; final[v0] = 1; for (i = 1;i< G->vexnum; ++i) { min = INT_MAX; for (w = 0 ; w < G->vexnum; ++w) if (!final[w]) if(D[w] < min) { v = w; min = D[w]; } final[v] = 1; for (w = 0; w < G->vexnum; ++w) if (!final[w] && (min + G->arc[v][w] < D[w])) { D[w] = min + G->arc[v][w]; for (j = 0; j < G->vexnum ; ++j) P->temp[w][j] = P->temp[v][j]; P->temp[w][w] = 1; } } for (i = 0;i < 5;++i) { for (w = 0 ;w <= i; ++w) if (P->temp[i][w]) printf("%d/t",w); printf("/n"); } printf("/n"); } int main(void) { MGraph G = { 5, 8, { {INT_MAX,4,5,4,1}, {4,INT_MAX,2,2,2}, {3,2,INT_MAX,3,2}, {2,INT_MAX,3,3,5}, {1,3,2,5,INT_MAX} } }; PathMatrix P = { { {0xFF,0xFF,0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF,0xFF,0xFF} } }; int D[5]; Shortest_DIJ(&G,3,&P,D); return 0; }
最短路径的程序---学会如何调试
最新推荐文章于 2024-04-29 22:29:20 发布