弗洛伊德算法有点小问题,希望大家帮忙解决下,谢谢大家乐
int Floyd(ArcNode d[][MAX_VERTEX_NUM],int path[][MAX_VERTEX_NUM],AdjMatrix *G)
{
int n=G->vexnum;
int i,j,k;
/*d=new ArcNode *[n];path=new int*[n];*/
for(i=0;i<n;i++)
{
/*d[i]=new ArcNode[n];path[i]=new int[n];*/
for(j=0;j<n;j++)
{
d[i][j].adj=G->arcs[G->vexnum][G->vexnum].adj;
if(i!=j&&d[i][j].adj<INFINITY)path[i][j]=i;
else path[i][j]=-1;
}
}
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(d[i][k].adj+d[k][j].adj<d[i][j].adj)
{
d[i][j].adj=d[i][k].adj+d[k][j].adj;
path[i][j]=path[k][j];
}
return 1;
}
void main ()
{
AdjMatrix G;
//initialize(G);
CreateDN(&G); 这是创建有向图,函数省略了
for(int i=0;i<G.vexnum;i++)
{
for(int j=0;j<G.vexnum;j++)
{
printf("%-10d",G.arcs[i][j].adj);
}
printf("%\n");
}
ArcNode d[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
int path[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
Floyd(d,path,&G);
printf("path路径");
printf("%\n");
for(i=0;i<G.vexnum;i++)
{
for(int j=0;j<G.vexnum;j++)
{
printf("%-10d",path[i][j]);
}
printf("%\n");
}
}
有向图为(32768为无穷大)
32768 1 32768 4
32768 32768 4 2
3 5 32768 8
32768 32768 6 32768
输出地path数组却是
-1 0 0 0
1 0 0 0
2 0 0 0
3 0 0 0
但是正确的应该是
-1 0 3 1
2 -1 3 1
2 0 -1 1
2 0 3 -1
不知道是哪里出了问题,希望各位认真看看,谢谢大家了,这个对我很重要。