最短路径算法—Floyd(弗洛伊德)算法
来源:互联网 发布:电脑屏幕录像软件推荐 编辑:程序博客网 时间:2024/06/06 01:06
转载自:http://www.wutianqi.com/?p=1903
Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离,时间复杂度为O(n^3)。
使用条件&范围
通常可以在任何图中使用,包括有向图、带负权边的图。
Floyd-Warshall 算法用来找出每对点之间的最短距离。它需要用邻接矩阵来储存边,这个算法通过考虑最佳子路径来得到最佳路径。
1.注意单独一条边的路径也不一定是最佳路径。
2.从任意一条单边路径开始。所有两点之间的距离是边的权,或者无穷大,如果两点之间没有边相连。
对于每一对顶点 u 和 v,看看是否存在一个顶点 w 使得从 u 到 w 再到 v 比己知的路径更短。如果是更新它。
3.不可思议的是,只要按排适当,就能得到结果。
伪代码:
我们平时所见的Floyd算法的一般形式如下:
注意下第6行这个地方,如果dist[i][k]或者dist[k][j]不存在,程序中用一个很大的数代替。最好写成if(dist[i] [k]!=INF && dist[k][j]!=INF && dist[i][k]+dist[k][j]<dist[i][j]),从而防止溢出所造成的错误。 floyd算法的实现以及输出最短路径和最短路径长度,具体过程请看【动画演示Floyd算法】。
代码说明几点:
1、A[][]数组初始化为各顶点间的原本距离,最后存储各顶点间的最短距离。
2、path[][]数组保存最短路径,与当前迭代的次数有关。初始化都为-1,表示没有中间顶点。在求A[i][j]过程中,path[i][j]存放从顶点vi到顶点vj的中间顶点编号不大于k的最短路径上前一个结点的编号。在算法结束时,由二维数组path的值回溯,可以得到从顶点vi到顶点vj的最短路径。
初始化A[][]数组为如下,即有向图的邻接矩阵。
完整的实现代码如下:
- 最短路径算法—Floyd(弗洛伊德)算法
- 最短路径算法(3)—Floyd(弗洛伊德)算法
- 最短路径算法—Floyd(弗洛伊德)算法
- 最短路径之弗洛伊德算法(Floyd)
- 最短路径之Floyd(弗洛伊德)算法
- Floyd Warshall 弗洛伊德算法---最短路径
- 最短路径--弗洛伊德(Floyd)算法
- 算法:最短路径之弗洛伊德(Floyd)算法
- 算法 最短路径之弗洛伊德算法(Floyd)
- 弗洛伊德(Floyd)算法求解图的最短路径
- 图的最短路径弗洛伊德Floyd算法
- 最短路径之弗洛伊德算法(Floyd)
- 弗洛伊德(Floyd)算法求图的最短路径
- 总结一下最短路径的弗洛伊德算法(Floyd)
- 【算法】最短路径-弗洛伊德(Floyd-Warshall)
- 图之最短路径:弗洛伊德(Floyd)算法
- 最短路径—弗洛伊德算法
- 弗洛伊德最短路径算法
- Python:归并排序算法
- c++虚函数的内存模型
- 第4章 CloudStack的安装与配置
- 从VS开始
- [Python]理解Python深拷贝DeepCopy与浅拷贝ShallowCopy
- 最短路径算法—Floyd(弗洛伊德)算法
- 258. Add Digits
- source bash_profile是干啥的
- 关于component-scan中base-package包含通配符的问题探究
- Virtio概述和基本原理
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo?
- 限制用户只能登录一次的最佳方案
- spring tool suit 安装方法
- Button多选操作