关于Floyd算法三重循环顺序的问题
来源:互联网 发布:websocket java 案例 编辑:程序博客网 时间:2024/05/16 08:34
Floyd算法是一个经典的动态规划算法。用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径。从动态规划的角度看问题,我们需要为这个目标重新做一个诠释(这个诠释正是动态规划最富创造力的精华所在)
voidFloyd(MGraph g)
{
int A[MAXV][MAXV];
intpath[MAXV][MAXV];
int i,j,k,n=g.n;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
A[i][j]=g.edges[i][j];
path[i][j]=-1;
}
for(k=0;k<n;k++)
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(A[i][j]>(A[i][k]+A[k][j]))
{
A[i][j]=A[i][k]+A[k][j];
path[i][j]=k;
}
}
}
那么,可不可以先循环i和j,然后把k放到最内层呢?
答案是不行的,如果打乱了i、j、k的顺序,则程序无法得出正确的结果。
可以把k想象成一个阶段,即k为中转点时,枚举i、j,通过k的变动不停地松弛i、j之间的最短路。因为i、j可以重复遍历,但k不能。如果k在内层循环,程序无法进行多次的松弛操作,也就是程序出错的原因。
shan_mx
- 关于Floyd算法三重循环顺序的问题
- 关于Floyd算法三层循环顺序问题
- Floyd算法三重循环理解
- 那些年我们写过的三重循环----CodeForces 295B Greg and Graph 重温Floyd算法
- floyd算法(循环问题)
- 算法的三重境界
- 实现循环的三重境界
- 农具厂农具问题,三重for循环
- 使用三重嵌套循环暴力查找勾股数及不同算法的比较(Pythagorean Triples)
- destoon三重循环显示的幻灯片
- 关于对Floyd算法的思索
- 累加型算法和三重循环语句及示例
- 有关Floyd算法问题
- 20170801 JAVA用三重循环解决比赛分组逻辑问题
- for循环的执行顺序问题
- for in 循环的输出顺序问题
- 利用三重循环“穷举”
- 提交三重路径产生的问题
- 二分查找的两种实现方式
- Leetcode 219. Contains Duplicate II
- CCCC-GPLT L1-035. 情人节 团体程序设计天梯赛
- Java笔记
- angularjs与requirejs整合实用技巧
- 关于Floyd算法三重循环顺序的问题
- 分数加减法
- 测试
- 【DRP】笔记之JavaScript内置对象
- leetcode 169 Majority Element
- ps快捷键
- 机器视觉学习笔记--二值图像处理
- 歌曲《随缘》国语版
- Spring 拦截器配置——模糊路径的含义