Floyd算法里的三个for循环能换吗?解释

如题
for( k=0 ; k<n ; ++k )
for( i=0 ; i<n ; ++i )
for(j=0 ; j<n ; ++j )
if( i!=k&&j!=k && j!=i && D[i][k]<150 && D[k][j]<150 && D[i][k]+D[k][j]<D[i][j])//不与自己比较
D[i][j] = D[i][k]+D[k][j];
第一个K的解释是什么啊,后面量可以换的

不能的。
lz知道动态规划么?
那个k相当于一个阶段,而i,j只是枚举状态,当然不能换。
它的含义是通过求出i到j之间经过的点全部<=k的最短路推出i到j之间经过的点全部<=k+1的最短路,这个k必须放在第一重循环。
至于i,j,有对称性,lz想换就换吧 = =
还不懂,就加好友问吧。

就是枚举一个中转点,先i->k,在k->j,这个必须从小到大,不能和下面的换。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2024-01-31
能换,跑三遍就行了
第2个回答  2010-04-22
学习了
相似回答