数据结构图之四(最短路径--弗洛伊德算法)
2017-04-17 16:57
621 查看
【1】为什么需要弗洛伊德算法?
带权图中单个源点到所有顶点的最短路径问题可以用《迪杰斯特拉算法》求解。
那如果要求图中每一个顶点与其它顶点之间的最短路径呢?类似可以想到的方法为:
每次以一个顶点为源点,重复执行地杰斯特拉算法算法n次。
这样,理论上我们便可以求得每一个顶点与其它顶点的最短路径,总的执行时间为O(n3)。
好吧!为了实现这个中需求,可以采用另外一种求解算法:弗洛伊德算法。
为了更好的理解弗洛伊德算法的精妙,我们先看简单的案例。
如下图是一个最简单的3个顶点连通网图:
【2】弗洛伊德算法
弗洛伊德算法是非常漂亮的算法,简洁直观大气上档次。
不过很可惜由于它的三重循环,因此也是O(n*n*n)的时间复杂度。
如果你面临需要求所有顶点至所有顶点的最短路径问题?
它是很好的选择。算法代码如下图:
关于本算法再不做详细赘述。如若感兴趣,下面的代码案例可以自己琢磨琢磨。
【3】弗洛伊德算法实现
注意:本算法的实现案例与迪杰斯特拉算法相同都是在求同一个图的最短路径问题。
不同的是这个算法可以求得所有顶点到所有顶点的最短路径。
源代码:
1. 邻接矩阵源码(MatrixUDG.java)
2. 邻接表源码(ListUDG.java)
带权图中单个源点到所有顶点的最短路径问题可以用《迪杰斯特拉算法》求解。
那如果要求图中每一个顶点与其它顶点之间的最短路径呢?类似可以想到的方法为:
每次以一个顶点为源点,重复执行地杰斯特拉算法算法n次。
这样,理论上我们便可以求得每一个顶点与其它顶点的最短路径,总的执行时间为O(n3)。
好吧!为了实现这个中需求,可以采用另外一种求解算法:弗洛伊德算法。
为了更好的理解弗洛伊德算法的精妙,我们先看简单的案例。
如下图是一个最简单的3个顶点连通网图:
【2】弗洛伊德算法
弗洛伊德算法是非常漂亮的算法,简洁直观大气上档次。
不过很可惜由于它的三重循环,因此也是O(n*n*n)的时间复杂度。
如果你面临需要求所有顶点至所有顶点的最短路径问题?
它是很好的选择。算法代码如下图:
关于本算法再不做详细赘述。如若感兴趣,下面的代码案例可以自己琢磨琢磨。
【3】弗洛伊德算法实现
注意:本算法的实现案例与迪杰斯特拉算法相同都是在求同一个图的最短路径问题。
不同的是这个算法可以求得所有顶点到所有顶点的最短路径。
源代码:
1. 邻接矩阵源码(MatrixUDG.java)
2. 邻接表源码(ListUDG.java)
相关文章推荐
- 数据结构-图-最短路径(2)弗洛伊德算法构造
- 数据结构图之四(最短路径--弗洛伊德算法)
- Pku acm 1062 昂贵的聘礼 数据结构题目解题报告(七)—单源最短路径:Dijkstra算法
- 算法——数据结构图的最短路径实现JAVA代码
- 数据结构之---C语言实现最短路径之Floyd(弗洛伊德)算法
- 数据结构与算法——无权最短路径算法的C++实现
- 第十三周--数据结构-从一个顶点到其余各顶点的最短路径
- [置顶] 数据结构之 迪杰斯特拉最短路径算法
- 数据结构实践项目——最短路径和拓扑序列
- 数据结构基础温故-5.图(下):最短路径
- 数据结构之 最短路径
- 【数据结构与算法】图之最短路径
- 数据结构与算法15:单源最短路径弗洛伊德Floyd算法
- 数据结构课设题目——求第K短的最短路径
- 数据结构与算法12:单源最短路径Dijkstra算法
- 看数据结构写代码(47)迪杰斯特拉最短路径算法
- 数据结构——带权有向图(最短路径算法Dijkstra算法)
- 数据结构与算法问题 单源最短路径 浙大OJ
- 数据结构之(图最短路径之)Dijkstra(迪杰斯特拉)算法
- 数据结构.图.无向带权&邻接矩阵.最短路径Dijkstra算法