弗洛伊德算法有点小问题,希望大家帮忙解决下,谢谢大家乐

jinyanhe 2011-02-20 02:07:02
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

不知道是哪里出了问题,希望各位认真看看,谢谢大家了,这个对我很重要。

...全文
104 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
無_1024 2011-02-20
  • 打赏
  • 举报
回复
d[i][j].adj=G->arcs[G->vexnum][G->vexnum].adj;
这样的话所有的d[i][j].adj都是一样的 因为G->vexnum是一个不变的常量
qq120848369 2011-02-20
  • 打赏
  • 举报
回复
d[i][j].adj=G->arcs[G->vexnum][G->vexnum].adj;

我表示对此表示猜疑,自己仔细点检查就知道了.
heguo2chao3 2011-02-20
  • 打赏
  • 举报
回复
把所有代码都贴出来吧…… 利于调试
qq120848369 2011-02-20
  • 打赏
  • 举报
回复
把所有代码都贴上来,测试用例贴上来。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧