迪杰斯特拉算法源码---编译通过,有运行结果,但是结果不正确----高手给看看
#include <stdio.h>#include <limits.h>
#define MAX_VERTEX_NUM 10
#define OK 1
int Visited[MAX_VERTEX_NUM];
typedef char vextype;
typedef int adjtype;
typedef struct
{ vextype vexs[MAX_VERTEX_NUM];
adjtype arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int vexnum,arcnum;
}MGraph;
int p[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int d[MAX_VERTEX_NUM];
void shortestpath(MGraph *g,int v0)
{int v,w,i,min,j;
int final[MAX_VERTEX_NUM];
for(v=0;v<g->vexnum;++v)/*初始化路径*/
{final[v]=0;
d[v]=g->arcs[v0][v];
for(w=0;w<g->vexnum;++w)
p[v][w]=0;
if(d[v]<INT_MAX)
p[v][v0]=p[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]&&d[w]<min)
{v=w;
min=d[w];
}
final[v]=1;
for(w=0;w<g->vexnum;++w)
if(!final[w]&&(min+g->arcs[v][w]<d[w]))
{d[w]=min+g->arcs[v][w];
for(j=0;j<g->vexnum;++j)
p[w][j]=p[v][j];
p[w][w]=1;
}
}
}
int LocateVex(MGraph *G,char u)
{int i;
for(i=0;i<G->vexnum;++i)
if(G->vexs[i]==u)
return i;
return -1;
}
CreateDN(MGraph *ga) /* 建立有向网络 */
{
int i,j,k;
int n,e;
char v1,v2;
int w;
printf("input the vexnum,arcnum:\n");
scanf("%d%d",&(ga->vexnum),&(ga->arcnum));
getchar();
n=ga->vexnum;
e=ga->arcnum;
printf("input the vex:\n");
for(i=0;i<n;i++)
{scanf("%c",&ga->vexs[i]);
}
/*读入顶点信息,建立顶点表*/
for(i=0;i<n;i++)
for(j=0;j<n;j++)
ga->arcs[i][j]=INT_MAX; /*邻接矩阵初始化*/
getchar();
for(k=0;k<e;k++) /*读入e条边*/
{
printf("input the arc information:\n");
scanf("%c,%c,%d%*c",&v1,&v2,&w);/*读入边(vi,vj)上的权值w*/
i=LocateVex(ga,v1);
j=LocateVex(ga,v2);
ga->arcs[i][j]=w;
}
}
main()
{MGraph g;
int i,k,j;
CreateDN(&g);
for(i=0;i<g.vexnum;++i)
{ for(j=0;j<g.vexnum;++j)
printf("%10d ",g.arcs[i][j]);
printf("\n");
}
i=LocateVex(&g,g.vexs[0]);
shortestpath(&g,i);
printf("the shortest path what %c get to other vex:\n",g.vexs[0]);
for(i=0;i<g.vexnum;i++)
if(i!=0)
printf("%c ---- %c:%d\n",g.vexs[0],g.vexs[i],d[i]);
printf("p matrix:\n");
for(i=0;i<g.vexnum;i++)
{ for(k=0;k<g.vexnum;k++)
printf("%d ",p[i][k]);
printf("\n");
}
/* if(p[i][k]==1)
{printf("%c to %c get through:",g.vexs[0],g.vexs[i]);
printf("%c ",g.vexs[k]);
printf("\n");
} */
getch();
}
输出结果不正确,高手给指导一下,谢谢了。。。。