您的位置:首页 > 其它

最短路径的程序---学会如何调试

2010-12-13 09:15 281 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: