Floyd 算法

 

 佛罗伊德算法在图论中求两个点之间的最短距离时很容易,最起码在编码量上很低,不过时间复杂度有O(n^3).

记不清从哪个大神那里看到了这个算法的解析,只是给了我很深的印象.下文也是那个大神的主要意思,照般照抄,我第一次接触Floyd算法到理解这个算法都全靠那个大神,感激中....

算法描述如下:

      如果有一个矩阵d,其中 d(i,j) > 0表示 i 城市到 j 城市的距离。若 i 与 j 之间无路可通,那么 d(i,j) 就是无穷大。又有 d(i,i) = 0。编写一个程序,通过这个距离矩阵d,把任意两个城市之间的最短与其行径的路径找出来。
      如何找出最短路径呢?我们知道对于任何一个城市而言,i 到 j 的最短距离可以分为两种情况讨论,

  1:i 直接到 j ;

  2:i 经过 k 到达 j ;

        所以可以令k=1,2,3,...,n ( n 是城市的数目),在检查 d(i,j) 与 d(i,k) + d(k,j) 的值;在此d(i,k) 与 d(k,j) 分别是目前为止所知道的 i 到 k 与 k  到 j 的最短距离,因此 d(i,k) + d(k,j) 就是 i 到 j 经过 k 的最短距离。所以,若有 d(i,j) > d(i,k) + d(k,j),就表示从 i 出发经过 k 再到 j 的距离要比原来从 i 到 j 距离短,自然把 i 到 j 的 d(i,j) 重写为 d(i,k) + d(k,j),每当一个 k 查完了,d(i,j

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值