Bellman-Ford 贝尔曼-福特

算法思想

贝尔曼-福特算法(英语:Bellman–Ford algorithm),求解单源最短路径问题的一种算法,由理查德·贝尔曼 和 莱斯特·福特 创立的。它的原理是对图进行次松弛操作,得到所有可能的最短路径。其优于迪科斯彻算法的方面是边的权值可以为负数、实现简单,缺点是时间复杂度过高,高达O(|N||M|)。但算法可以进行若干种优化,提高了效率。

首先指出,图的任意一条最短路径既不能包含负权回路,也不会包含正权回路,因此它最多包含|N|-1条边。

枚举n次,每次枚举每一条边,如果dis[u] > dis[v]+w[v][u],则dis[u] = dis[v]+w[v][u],如果图没有负环则最多跑n-1次,否则可以一直跑下去

模板

bool Bellman_Ford(int s)
{
memset(dis,inf,sizeof dis);
dis[s] = 0;
bool flag;
for(int i = 1; i <= n; i++) //n个点,跑n次
{
flag = false;
for(int j = 0; j < m; j++) //m条边,每次枚举每一条边
{
int x = edge[j].u;
int y = edge[j].v;
int z = edge[j].w;
if(dis[y] > dis[x]+z)
{
dis[y] = dis[x]+z;
flag = true;
}
}
if(!flag) break;
if(i==n && flag) return false;//存在负环
}
return true;
}

模板

bool bellman_ford(){
memset(dis,INF,sizeof(dis));
for(int i=1;i<n;++i){
for(int j=1;j<=m;++j){
if(dis[edge[j].v]>dis[edge[j].u]+edge[j].w){
dis[edge[j].v]=dis[edge[j].u]+edge[j].w;
}
}
}
for(int j=1;j<=m;++j){
if(dis[edge[j].v]>dis[edge[j].u]+edge[j].w)
return false;
}
return true;
}

例题

参考博客

百度百科

https://www.cnblogs.com/CLAYzhan/articles/11621448.html

最短路--Bellman-Ford的更多相关文章

  1. ACM/ICPC 之 最短路径-Bellman Ford范例(POJ1556-POJ2240)

    两道Bellman Ford解最短路的范例,Bellman Ford只是一种最短路的方法,两道都可以用dijkstra, SPFA做. Bellman Ford解法是将每条边遍历一次,遍历一次所有边可 ...

  2. poj1860 bellman—ford队列优化 Currency Exchange

    Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 22123   Accepted: 799 ...

  3. uva 558 - Wormholes(Bellman Ford判断负环)

    题目链接:558 - Wormholes 题目大意:给出n和m,表示有n个点,然后给出m条边,然后判断给出的有向图中是否存在负环. 解题思路:利用Bellman Ford算法,若进行第n次松弛时,还能 ...

  4. Bellman—Ford算法思想

    ---恢复内容开始--- Bellman—Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题.对于给定的带权(有向或无向)图G=(V,E),其源点为s,加权函数w是边集E的映射.对图G ...

  5. Bellman - Ford 算法解决最短路径问题

    Bellman - Ford 算法: 一:基本算法 对于单源最短路径问题,上一篇文章中介绍了 Dijkstra 算法,但是由于 Dijkstra 算法局限于解决非负权的最短路径问题,对于带负权的图就力 ...

  6. 蓝桥杯 算法训练 最短路 [ 最短路 bellman ]

    传送门   算法训练 最短路   时间限制:1.0s   内存限制:256.0MB     锦囊1   锦囊2   锦囊3   问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证 ...

  7. 多源第k短路 (ford + 重新定义编号) / 出发点、终点确定的第k短路 (Spfa+ 启发搜索)

    第k短路 Description 一天,HighLights实在是闲的不行,他选取了n个地点,n各地点之间共有m条路径,他想找到这m条路径组成的第k短路,你能帮助他嘛? Input 第一行三个正整数, ...

  8. ACM/ICPC 之 Bellman Ford练习题(ZOJ1791(POJ1613))

    这道题稍复杂一些,需要掌握字符串输入的处理+限制了可以行走的时间. ZOJ1791(POJ1613)-Cave Raider //限制行走时间的最短路 //POJ1613-ZOJ1791 //Time ...

  9. Dijkstra算法与Bellman - Ford算法示例(源自网上大牛的博客)【图论】

    题意:题目大意:有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离 poj2387 Description Bessie is out in the field and ...

  10. POJ 2240 Arbitrage (Bellman Ford判正环)

    Arbitrage Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:27167   Accepted: 11440 Descri ...

随机推荐

  1. Spring Security 官网文档学习

    文章目录 通过`maven`向普通的`WEB`项目中引入`spring security` 配置 `spring security` `configure(HttpSecurity)` 方法 自定义U ...

  2. C++中的const的简单用法

    一.符号常量的声明 常量声明的语句的形式: const +  数据类型说明符 + 常量名 =  常量值     数据类型说明符  + const + 常量名 =  常量值       注意: 符号常量 ...

  3. http GET 和 POST 请求的优缺点、区别以及误区

    原文章:https://blog.csdn.net/qq_28483283/article/details/80207674 请优先参考原文章 Get和Post在面试中一般都会问到,一般的区别: (1 ...

  4. 20191031:Python取反运算详解

    20191031:Python取反运算详解 取反运算:~3 == 4 1.对于数字 3 =======>转换为二进制表示为011 2.对011取反为100 3.为什么表示-4 a.计算机用补码表 ...

  5. 【HC89S003F4开发板】 3串口调试

    HC89S003F4开发板串口调试 使用资料自带的demo 主程序 /************************************系统初始化************************ ...

  6. mouseover mouseleave

    mouseover在当鼠标移入元素或其子元素的时候都会触发,是一个重复触发,冒泡的过程.见下面例子,一个父元素包含一个子元素,在其父元素内滑动鼠标,超出子元素的范围时,也会触发事件. 而mouseen ...

  7. hdu 5432

    Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so he ...

  8. 代码审计:covercms 1.6

    小菜只能找找没人用的cms练练手了 cnvd上有个 CoverCMS V1.16存在多个漏洞 漏洞描述 :CoverCMS V1.16存在重装.信息泄露.暴力破解.存储型跨站脚本和反射型跨站脚本漏洞. ...

  9. jQueryUI的widget的Hello World

    为了看懂jQuery-File-Upload里面的代码,所以学习到这里 //main.js //实践自定义jquery widget,风格1 (function($){ //$.widget('命名空 ...

  10. 哈夫曼树详解——PHP代码实现

    在介绍哈夫曼树之前需要先了解一些专业术语 路径和路径长度 在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径.通路中分支的数目称为路径长度.若规定根结点的层数为1,则从根结点到第L ...