求最短路径的三种基本算法
来源:互联网 发布:php判断是否为整数 编辑:程序博客网 时间:2024/05/29 18:44
最短路径
//代码请翻挑战程序设计
一、Bellman-Ford算法
从原点一层一层扩展更新(像从a能直接到b,则看作b是a的下一层),直到再次遍历所有边时不再有更新,则所有点距原点的最小值确定。
1、用在:在无负圈的单向图求两点最短路径。
2、模板:d[n]:n个点距原点最短路径,初始化INF。(更新对象,下同)
Struct edge{int from,to,cost;} 存储边。
时间复杂度:O(|V|*|E|)
//还有对其优化的SPFA算法,时间复杂度只有O(|E|)
二、Dijkstra算法
从未确定最短路点集中挑出最短路的点放入已确定最短路点集中,然后在这一点上把下一层值更新,循坏这个操作
,直到未确定最短路点集中没有点(如第一次操作,把原点加入已确定最短路点集中)。
1、用在:在边的权值无负值的单向图求两点最短路径。
2、模板:d[n]:n个点距原点最短路径,初始化INF
E[n][n]:表示边
Bool used[n];标志已确定
时间复杂度O(|V|*|V|)
优化(邻接链表,优先队列)
邻接链表的使用:
Vector <edge> G[n];
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|立方)
- 求最短路径的三种基本算法
- POJ_1847_Tram(单源最短路径的三种算法实现)
- 图的基本算法(单源最短路径)
- C语言基本数据结构之三(图的广度及深度遍历,求单源最短路径的Dijkstra算法)
- 16.三种基本的GC算法基石
- 关于三种基本排序算法的速度直观分析
- 三种基本的排序算法:选择,插入,冒泡
- 单源最短路径的基本算法 -- 算法导论笔记
- 基本排序(一):冒泡排序算法的三种基本实现
- 三种基本排序算法+快速排序
- 基本算法练习三
- 最短路径算法-三种算法简介
- 【转】最短路径算法-三种算法简介
- 每对顶点的最短路径 : 基本算法
- 最小生成树,最短路径的基本算法
- 一个求最短路径的算法
- 小时候的游戏(三):最短路径算法2
- 面试最基本的三种排序算法 冒泡排序 插入排序 选择排序
- spring集成quartz
- python下几种打开文件的方式
- Android平台Camera实时滤镜实现方法探讨(九)--磨皮算法探讨(一)
- OpenJudge百炼-2952-循环数 & poj-1047-Round and Round We Go-C语言-高精度计算
- java注解
- 求最短路径的三种基本算法
- 从零开始深度学习 E1. cuda+Tensorflow环境部署
- 3种简单排序:冒泡排序、选择排序和插入排序
- 定时执行任务案例
- 【BZOJ1875】[SDOI2009]HH去散步(矩阵乘法)
- Tomcat 8.0.30配置https的步骤
- Android--(7)--Android Shape实现控件背景
- java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
- 623. Add One Row to Tree