Bellman-Ford 最短路径算法
算法证明:http://courses.csail.mit.edu/6.006/spring11/lectures/lec15.pdf
先来看一个这样的图:
这是含有负边权的,如果是用djistra的话将会进行无限次松弛操作。从这里可以看出松弛操作是有一点问题的,如果存在负环,将无止尽的松弛,最短路也就不存在了。还有就是选择不同的遍历顺序对于松弛操作来说是挺重要的。今天就来了解一下聪明的Bellman-Ford算法吧!
Bellman-Ford算法每一轮把边按照一定的顺序,逐条边进行松弛。经过|V|-1轮后,得到的必定是最短路径。
献上松弛操作和Bellman-Ford算法的伪代码:
/*
松弛操作
*/
for v in V:
dist[v] = ∞
dist[s]=
while some edge(u,v) has dist[v]>dist[u]+w(u,v):
pick such an edge(u,v)
relax(u,v):
if dist[v]>dist[u]+w(u,v):
dist[v]=dist[u]+w(u,v) /*
Bellman-Ford
*/
for v in V:
dist[v] = ∞
dist[s]=
for i from to |V|-:
for(u,v)in E:
relax(u,v):
if dist[v]>dist[u]+w(u,v):
dist[v]=dist[u]+w(u,v)
接下来就以上图为例,按照以下顺序处理所有的边:(A,B),(A,C),(B,C),(B,D),(B,E),(E,D),(D,B),(D,C).
然后进行第一次迭代:
最开始dist数组的内容为[0,∞,∞,∞,∞],现在处理(A,B),由于dist[B]=∞,dist[A]+w(A,B)=-1,此时应更新dist[B],即dist为[0,-1,∞,∞,∞]。
同理,按照顺序逐个处理边,将得到以下的dist变化过程:
[0,-1,4,∞,∞] (A,C)
[0,-1,2,∞,∞] (B,C)
[0,-1,2,1,∞] (B,D)
[0,-1,2,1,1] (B,E)
[0,-1,2,-2,1] (E,D)
[0,-1,2,-2,1] (D,B)
[0,-1,2,-2,1] (D,C)
第一轮的最后结果就为上面最后一行,当然了,这个不一定是最优的,因此我们还需要进行下一轮,经过|V-1|次后就一定能求出最短路了。
当然,存在负环是无法得到最短路的,此时只需要在最后进行判断,对每条边都判断以下能不能再进行松弛操作,如果存在可以的边,那就是出现负环了。
Bellman-Ford 最短路径算法的更多相关文章
- 21.boost Ford最短路径算法(效率低)
到某个节点最近距离 最短路径当前节点的父节点 完整代码 #include <iostream> #include <string> #incl ...
- Bellman - Ford 算法解决最短路径问题
Bellman - Ford 算法: 一:基本算法 对于单源最短路径问题,上一篇文章中介绍了 Dijkstra 算法,但是由于 Dijkstra 算法局限于解决非负权的最短路径问题,对于带负权的图就力 ...
- Bellman—Ford算法思想
---恢复内容开始--- Bellman—Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题.对于给定的带权(有向或无向)图G=(V,E),其源点为s,加权函数w是边集E的映射.对图G ...
- ACM/ICPC 之 最短路径-Bellman Ford范例(POJ1556-POJ2240)
两道Bellman Ford解最短路的范例,Bellman Ford只是一种最短路的方法,两道都可以用dijkstra, SPFA做. Bellman Ford解法是将每条边遍历一次,遍历一次所有边可 ...
- Johnson 全源最短路径算法
解决单源最短路径问题(Single Source Shortest Paths Problem)的算法包括: Dijkstra 单源最短路径算法:时间复杂度为 O(E + VlogV),要求权值非负: ...
- Floyd-Warshall 全源最短路径算法
Floyd-Warshall 算法采用动态规划方案来解决在一个有向图 G = (V, E) 上每对顶点间的最短路径问题,即全源最短路径问题(All-Pairs Shortest Paths Probl ...
- Bellman-Ford 单源最短路径算法
Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Leste ...
- poj1860 bellman—ford队列优化 Currency Exchange
Currency Exchange Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 22123 Accepted: 799 ...
- uva 558 - Wormholes(Bellman Ford判断负环)
题目链接:558 - Wormholes 题目大意:给出n和m,表示有n个点,然后给出m条边,然后判断给出的有向图中是否存在负环. 解题思路:利用Bellman Ford算法,若进行第n次松弛时,还能 ...
- 最短路径算法(II)
什么??你问我为什么不在一篇文章写完所有方法?? Hmm…其实我是想的,但是博皮的加载速度再带上文章超长图片超多的话… 可能这辈子都打不开了吧… 上接https://www.cnblogs.com/U ...
随机推荐
- 最简单的iOS网络请求
做iOS开发,说到网络请求,大家可能都不约而同的提到AFN,可以说大家的网络请求都是用AFN封装而成,AFN的强大易用的确很好. 但是版本升级就会出现一些问题,所以就自己基于iOS原生封装了一个网络请 ...
- mark一下岗位
一.中国移动杭州研发中心——测试开发工程师 https://campusresume.zhaopin.com/resume/14375/1 等内推信息 岗位描述:作为产品的质量守护者,在全面理解被 ...
- [paper]MaskFusion: Real-Time Recognition, Tracking and Reconstruction of Multiple Moving Objects
Before 近期在调研关于RGBD在室内移动机器人下的语义导航的研究.目前帝国理工的Andrew Davison在这边有两个团队在研究,分别是Fusion++ 和 这篇 MaskFusion.这篇是 ...
- 12.17daily_scrum
悬浮窗的优化设计工作已经展开,各界面的测试也在有条不紊的进行,大家都尽量做到了在发现了软件自身的一些问题和bug后,做到在第一时间及时恢复和修改,工作进度的安排也在预期之中,明日的任务发布如下: 具体 ...
- 安全相关论文--Security and Dependability
安全相关论文--Security and Dependability 所参考的文献来自于Kreutz D, Ramos F M V, Esteves Verissimo P, et al. Softw ...
- 12th final 发布评价II
1.约跑App——nice!:用户界面很是赏心悦目,给人一种很放松的感觉,与App的主题很配合,同时也在本周内把同学提出的bug都很好地完善了,而且采用了摄像头进行发布,整个发布过程清晰明朗不少.把约 ...
- Mac安装Appium的Android环境
1.下载android sdk http://down.tech.sina.com.cn/page/45703.html 2.解压,配置环境变量 ANDROID_HOME=/Users/wp/ ...
- poi中如何自定义日期格式
1. poi的“Quick Guide”中提供了 “How to create date cells ”例子来说明如何创建日期单元格,代码如下: HSSFCellStyle cellStyle = w ...
- 用node编写cli工具
cli是command-line interface的缩写,即命令行工具,常用的vue-cli, create-react-app, express-generator 等都是cli工具. 本文以自己 ...
- BZOJ5461 PKUWC2018Minimax(概率期望+线段树合并+动态规划)
离散化后,容易想到设f[i][j]为i节点权值为j的概率,不妨设j权值在左子树,则有f[i][j]=f[lson][j](pi·f[rson][1~j]+(1-pi)·f[rson][j~m]). 考 ...