根据floyd算法,三重循环即可求出有向图中每一对顶点间的最短距离。
1……
2for (int k=1;k<=n;++k)
3 for (int i=1;i<=n;++i)
4 for (int j=1;j<=n;++j)
5 if (dis[i][j]>dis[i][k]+dis[k][j]) dis[i][j]=dis[i][k]+dis[k][j];
6……
但是,中间节点k一定要处在最外层循环。
考虑 dis[i][j]>dis[i][k]+dis[k][j] 的情况。如果继续循环,dis[i][k]与dis[k][j]的距离都有可能被更新。如果 i、j 是外层循环,dis[i][j]将不再被更新。这样便不能保证dis[i][j]的最优解。
posted on 2008-04-11 21:42
Joseph 阅读(393)
评论(0) 编辑 收藏 引用