求最短路径的三种基本算法
2017-09-10 19:10
295 查看
最短路径
//代码请翻挑战程序设计
一、Bellman-Ford算法
从原点一层一层扩展更新(像从a能直接到b,则看作b是a的下一层),直到再次遍历所有边时不再有更新,则所有点距原点的最小值确定。
1、用在:在无负圈的单向图求两点最短路径。
2、模板:d
:n个点距原点最短路径,初始化INF。(更新对象,下同)
Struct edge{int from,to,cost;} 存储边。
时间复杂度:O(|V|*|E|)
//还有对其优化的SPFA算法,时间复杂度只有O(|E|)
二、Dijkstra算法
从[u]未确定最短路点集[/u]中挑出最短路的点放入[u]已确定最短路点集[/u]中,然后在这一点上把下一层值更新,循坏这个操作
,直到[u]未确定最短路点集[/u]中没有点(如第一次操作,把原点加入[u]已确定最短路点集[/u]中)。
1、用在:在边的权值无负值的单向图求两点最短路径。
2、模板:d
:n个点距原点最短路径,初始化INF
E
:表示边
Bool used
;标志已确定
时间复杂度O(|V|*|V|)
优化(邻接链表,优先队列)
邻接链表的使用:
Vector <edge> G
;
struct edge{int to,cost};
每一个struct edge里表示n点到to点的cost(距离)。
pair<int
,int>功能:pair将一对值组合成一个值,这一对值可以具有不同的数据类型(T1和T2),两个值可以分别用pair的两个公有函数first和second访问。
优先队列不说了
优化后时间复杂度O(|E|*log|V|)
三、Floyd-Warshall算法
两点间的最短距离只有两种情况:
1.两点直接连接的距离(两点间的边不一定是直线,也不一定存在)
2.经过了其它点
Dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
可以看做Dp[i][j]算上了k点,而dp[i][j]是算上了k点之前的最短距离
实现:三重for循环,k最外层,i其次
时间复杂度O(|V|立方)
//代码请翻挑战程序设计
一、Bellman-Ford算法
从原点一层一层扩展更新(像从a能直接到b,则看作b是a的下一层),直到再次遍历所有边时不再有更新,则所有点距原点的最小值确定。
1、用在:在无负圈的单向图求两点最短路径。
2、模板:d
:n个点距原点最短路径,初始化INF。(更新对象,下同)
Struct edge{int from,to,cost;} 存储边。
时间复杂度:O(|V|*|E|)
//还有对其优化的SPFA算法,时间复杂度只有O(|E|)
二、Dijkstra算法
从[u]未确定最短路点集[/u]中挑出最短路的点放入[u]已确定最短路点集[/u]中,然后在这一点上把下一层值更新,循坏这个操作
,直到[u]未确定最短路点集[/u]中没有点(如第一次操作,把原点加入[u]已确定最短路点集[/u]中)。
1、用在:在边的权值无负值的单向图求两点最短路径。
2、模板:d
:n个点距原点最短路径,初始化INF
E
:表示边
Bool used
;标志已确定
时间复杂度O(|V|*|V|)
优化(邻接链表,优先队列)
邻接链表的使用:
Vector <edge> G
;
struct edge{int to,cost};
每一个struct edge里表示n点到to点的cost(距离)。
pair<int
,int>功能:pair将一对值组合成一个值,这一对值可以具有不同的数据类型(T1和T2),两个值可以分别用pair的两个公有函数first和second访问。
优先队列不说了
优化后时间复杂度O(|E|*log|V|)
三、Floyd-Warshall算法
两点间的最短距离只有两种情况:
1.两点直接连接的距离(两点间的边不一定是直线,也不一定存在)
2.经过了其它点
Dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
可以看做Dp[i][j]算上了k点,而dp[i][j]是算上了k点之前的最短距离
实现:三重for循环,k最外层,i其次
时间复杂度O(|V|立方)
相关文章推荐
- 三种最短路径算法
- 「关于单源最短路径的三种算法的思考(不包括计算多点路径的Floyd算法)」
- 单源最短路径的基本算法 -- 算法导论笔记
- 最小生成树,最短路径的基本算法
- 每对顶点的最短路径 : 基本算法
- 每对顶点间的最短路径基本算法 --- 算法导论笔记
- 图论基本算法3之最短路径(spfa)
- 数据结构与算法:最短路径,拓扑排序的基本概念
- 最短路径算法-三种算法简介
- POJ_1847_Tram(单源最短路径的三种算法实现)
- 用最基本的弗洛伊德算法求1到n的最短路径
- 求最短路径的三种算法: Ford, Dijkstra和Floyd
- 图的基本算法(单源最短路径)
- 最短路径基本介绍(2)--Dijkstra算法(单源最短路径算法)
- 【Python排序搜索基本算法】之Dijkstra最短路径算法(Dijkstra's Shortest-Path Algorithm)
- 【转】最短路径算法-三种算法简介
- 【2018寒假集训Day 7】【最短路径】三种算法的模板
- 设计一个算法,採用BFS方式输出图G中从顶点u到v的最短路径(不带权的无向连通图G採用邻接表存储)
- [算法系列之二十九]Bellman-Ford最短路径算法
- 基于postGIS的 PgRouting 1.02 on Win32(最短路径算法)