求助~关于Floyd算法 如何记录某两点最短路径-所经过的结点?

luckydog1987 2007-08-23 10:38:01
如题~~
小弟现在在做一个关于图各种算法的软件,要用窗口演示出各种算法的结果。
现在做到最短路径 Floyd算法。
网上搜索到很多算法,但都是只是得出了两点之间最短路径的数值。
我想问问如何纪录某两点之间最短路径所经过那些结点呢?

以下是一个Floyd算法,如何纪录经过的最短路径呢?
void Floyd(int G[][],int n)

{

  int i,j,k;

  for(i=0;i<n;i++)

    for(j=0;j<n;j++)

      G[i][j]=MAX;



  for(i=0;i<n;i++)

    for(j=0;j<n;j++)

      for(k=0;k<n;k++)

        if(G[j][k] > G[j][i] + G[i][k])

          G[j][k]=G[j][i] + G[i][k];

  return ;

}


...全文
1486 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
gohome123 2007-09-21
  • 打赏
  • 举报
回复
能不能把代码弄详细点,我也需要了解这个东西,另外节点多了,循环不是很多,影响运行速度
luckydog1987 2007-09-08
  • 打赏
  • 举报
回复
谢谢
已经解决
思想和楼上的一样
trueytht 2007-08-24
  • 打赏
  • 举报
回复
path[i][j]表示从顶点i到顶点j的路径上,顶点j的前驱
void floyd(int numVertices) {
for (int i = 0; i < numVertices; i++) {
for (int j = 0; j < numVertices; j++) {
a[i][j] = weight(i, j);
if (i != j && a[i][j] < MAXNUM) {
path[i][j] = i;
}
else {
path[i][j] = -1;
}
}
}

for (int k = 0; k < numVertices; k++) {
for (int i = 0; i < numVertices; i++) {
for (int j = 0; j < numVertices; j++) {
if (a[i][k] + a[k][j] < a[i][j]) {
a[i][j] = a[i][k] + a[k][j];
path[i][j] = path[k][j];
}
}
}
}
}
OnlyDi 2007-08-24
  • 打赏
  • 举报
回复
参考算法导论的第25章的第二节,有两个公式(25.6)和(25.7).上面还有个例子可以看看。
luckydog1987 2007-08-23
  • 打赏
  • 举报
回复
怎么都没有人来呀~~~~
luckydog1987 2007-08-23
  • 打赏
  • 举报
回复
在线等待
谢谢大虾们了

33,010

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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