佛罗伊德算法在图论中求两个点之间的最短距离时很容易,最起码在编码量上很低,不过时间复杂度有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