[最短路径弗洛伊德算法](三层循环顺序问题)

先上代码

for(int i=0;i<city;i++)for(int j=0;j<city;j++)for(int k=0;k<city;k++) {if(length[j][i]+length[i][k]<length[j][k])length[j][k]=length[j][i]+length[i][k];         }

众所周知,弗洛伊德是一个利用三层循环来暴力枚举所有可能情况的算法。且其关键是中间结点一定要放在最外层循环。
那么,问题来了:为什么中间结点要放在最外面呢?,有人甚至一度认为放在其他位置也是对的(我)。。。(是不是也有你)。。。

我在网上搜了一下,感觉说的不是很清楚。经过自己的理解后,希望能把这个问题说清楚一点吧,也希望可以帮助大家更好地理解这个算法。
我们知道,最短路径是靠邻接矩阵说话的,那么,请跟着我一起想一想分别把中间结点放在第一层,第二层,第三层时,邻接矩阵是如何随着循环而变化的。

放在第一层:

以我的代码为例,邻接矩阵是length。
此时length是一行一行逐行更新的,所有行更新完后,更换中间结点然后重新从第一行开始逐行更新。更换到最后一个结点时,所有length[j][k]还有一次更新的机会,而且此次更新利用了之前所有更新过的数据。

放在第二层:

length也是逐行更新,但是是先利用初始未更新过的数据去更新第一行若干遍,再去更新第二行若干遍。。。更新到最后一行就结束了。我们可以想到,除了在更新最后一行时,更新时用的数据都不一定是最短路径。就是说,**利用的是为更新完全的数据。**并且最重要的是,之后就没有了再次更新的机会。通俗地说,你用初始数据更新完第一行之后就不管它了。这样说大家应该就能理解了。

放在第三层:

length是利用未更新全面的数据单个更新若干次,之后就没有了再次更新的机会,与放在第二层类似,在下就不过多赘述了。

至此,大家应该能明白为什么中间结点变量要放在循环的最外层了吧。
如果本文能够帮助到你,我非常荣幸。点个赞让我开心一下不过分吧。

欢迎留个评论大家一起讨论。

[最短路径弗洛伊德算法]三层循环顺序问题相关推荐

  1. 求最短路径 —— 弗洛伊德算法

    弗洛伊德算法是求图中任意一对顶点间的最短路径的算法. 算法思想 递推产生一个n解方阵序列,,. . . ,,. . . , 其中[ i ][ j ]表示从顶点到顶点的路径长度,k表示绕行第k个顶点的运 ...

  2. 最短路径-弗洛伊德算法的java实现

    弗洛伊德算法介绍 和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学系教授罗 ...

  3. 最短路径之弗洛伊德算法

    [1]为什么需要弗洛伊德算法? 带权图中单个源点到所有顶点的最短路径问题可以用<迪杰斯特拉算法>求解. 那如果要求图中每一个顶点与其它顶点之间的最短路径呢?类似可以想到的方法为: 每次以一 ...

  4. (王道408考研数据结构)第六章图-第四节5:最短路径之弗洛伊德算法(思想、代码、演示、答题规范)

    文章目录 一:动态规划基本思想 二:弗洛伊德(Floyd)算法基本思想 三:弗洛伊德(Floyd)算法代码实现 四:弗洛伊德(Floyd)算法代码视频演示 五:弗洛伊德(Floyd)算法代码答题规范 ...

  5. 【算法】弗洛伊德算法 最短路径算法

    文章目录 1.概述 2.图解 2.1 图示 2.2 弗洛伊德算法的步骤: 3.代码 1.概述 弗洛伊德(Floyd)算法介绍 和Dijkstra算法一 样,弗洛伊德(Floyd)算法也是一种用 于寻找 ...

  6. 图解最短路径之弗洛伊德算法(Java实现)

    概述 Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法是一种在具有正或负边缘权重(但没有负环)的加权图中找到最短路径的 ...

  7. 最短路径(弗洛伊德算法)

    1 原理 ,假设存在一个最简单的连通图 2 代码 package leaning.graph;/** * 弗洛伊德算法求最短路径* * */ public class Floyd {// 表示V0顶点 ...

  8. 两点之间最短路径:弗洛伊德算法

    弗洛伊德算法是计算无向有权图中两点间最短路径的算法,复杂度为O(n^3).其思路是将两点间距离分为过(指定的)第三点或是不过,然后取它们的最小值,如此循环就可以得到两点之间真正的最小值. void f ...

  9. 校园导航系统之用弗洛伊德算法求加权图的最短路径

    其实这个示例是在大一数据结构课程设计的时候选的题目,只不过在昨天的算法分析与设计实验课上又看到了求加权图的最短路径,忽然想起当初课程设计时为了弄懂Floyd算法而不断抓狂的过程,觉得有必要将它从邮箱的 ...

最新文章

  1. 使用随机森林(Random Forest)进行特征筛选并可视化
  2. 参数整定临界比例度实验_控制算法手记自动整定方法初步
  3. 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——3.3 微信开发者中心...
  4. 类中友元(c++小细节篇一)
  5. CentOS 7.2 Ubuntu 18部署Rsync + Lsyncd服务实现文件实时同步/备份
  6. 计算机网络实验ifconfig,《计算机网络》操作系统网络配置实验.doc
  7. 【学习笔记】多重背包相关优化——二进制优化/单调队列优化
  8. 【软件开发底层知识修炼】二十四 ABI之函数调用约定
  9. 【转】DICOM入门(一)——语法
  10. Java小白版聊天室1.0版本
  11. Metasplotable3 简易安装教程
  12. sybase数据库与oracle,Oracle访问Sybase数据库的方法
  13. Android Studio Entry name *.xml collided解决方案
  14. SDL Trados Studio 2021(CAT翻译软件)官方中文版V16.1.5.4270 | 最新塔多思翻译软件下载
  15. 改进的cholesky matlab,矩阵的Cholesky分解的Matlab实现
  16. kindle买书建议
  17. 坚持责任和安全意识当先
  18. Python数据分析-北京房价分析
  19. switch商店显示服务器维护,国服switch eshop商城常见问题汇总 购买数字版问题答疑...
  20. Bitbucket 介绍与使用

热门文章

  1. 软件库Library之静态库\动态库和静态加载\动态加载
  2. WPF 实现触摸滑动功能
  3. 蓝牙耳机什么牌子好?四大品牌蓝牙耳机推荐
  4. admin ui html,H-ui Admin 后台
  5. CS versus EE
  6. 肺结节检测的一些要点总结
  7. Input output VI
  8. MYS-6ULX-IOT 开发板测评——面向高端物联网的极具性价比解决方案
  9. 【天下有春】人必须先说很多话,然后保持静默
  10. 天然气分布式能源系统在数据中心领域的应用