最短路--Bellman-Ford
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的更多相关文章
- ACM/ICPC 之 最短路径-Bellman Ford范例(POJ1556-POJ2240)
两道Bellman Ford解最短路的范例,Bellman Ford只是一种最短路的方法,两道都可以用dijkstra, SPFA做. Bellman Ford解法是将每条边遍历一次,遍历一次所有边可 ...
- 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次松弛时,还能 ...
- Bellman—Ford算法思想
---恢复内容开始--- Bellman—Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题.对于给定的带权(有向或无向)图G=(V,E),其源点为s,加权函数w是边集E的映射.对图G ...
- Bellman - Ford 算法解决最短路径问题
Bellman - Ford 算法: 一:基本算法 对于单源最短路径问题,上一篇文章中介绍了 Dijkstra 算法,但是由于 Dijkstra 算法局限于解决非负权的最短路径问题,对于带负权的图就力 ...
- 蓝桥杯 算法训练 最短路 [ 最短路 bellman ]
传送门 算法训练 最短路 时间限制:1.0s 内存限制:256.0MB 锦囊1 锦囊2 锦囊3 问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证 ...
- 多源第k短路 (ford + 重新定义编号) / 出发点、终点确定的第k短路 (Spfa+ 启发搜索)
第k短路 Description 一天,HighLights实在是闲的不行,他选取了n个地点,n各地点之间共有m条路径,他想找到这m条路径组成的第k短路,你能帮助他嘛? Input 第一行三个正整数, ...
- ACM/ICPC 之 Bellman Ford练习题(ZOJ1791(POJ1613))
这道题稍复杂一些,需要掌握字符串输入的处理+限制了可以行走的时间. ZOJ1791(POJ1613)-Cave Raider //限制行走时间的最短路 //POJ1613-ZOJ1791 //Time ...
- Dijkstra算法与Bellman - Ford算法示例(源自网上大牛的博客)【图论】
题意:题目大意:有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离 poj2387 Description Bessie is out in the field and ...
- POJ 2240 Arbitrage (Bellman Ford判正环)
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions:27167 Accepted: 11440 Descri ...
随机推荐
- 网络地址转换(NAT)
NAT是解决ipv4地址短缺的方案之一 NAT是将位于子网中的主机与外网连通,子网中所有的主机都可以通过路由器的网络地址转换访问外网.对于外网来说该路由器相当于一台完整的主机,子网内所有主机对外网的访 ...
- Hadoop 求单词count数
package com.yw.hadoop273; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.LongW ...
- PB数据窗口分页
第一步:增加一个计算列,此计算列必须放在Detail段,Expression中输入: ceiling(getrow()/500) --这里500还可以用全局函数取代,这样可以允许用户任意设置每页多少 ...
- stm32f103的低功耗开启和关闭
stm32f103低功耗分为WFI等待中断和WFE等待事件,我只用到等待中断,这里没有细究. 待机模式最低功耗2uA,只有备份寄存器和待机电路供电,PLL,HSI,HSE断开,寄存器和SRAM复位,除 ...
- EF Core 2.0 执行原始查询如何防止SQL注入
using (var context = new EFCoreDbContext()) { var searchString = "Jeffcky Wang"; Formattab ...
- [Luogu5319][BJOI2019]奥术神杖(分数规划+AC自动机)
对最终答案取对数,得到$\ln(Ans)=\frac{1}{c}\sum \ln(v_i)$,典型的分数规划问题.二分答案后,对所有咒语串建立AC自动机,然后套路地$f[i][j]$表示走到T的第i个 ...
- Yii2 redis 使用
首先要安装一下redis的扩展 composer require yiisoft/yii2-redis 在配置文件中添加redis配置 'components' => [ .... 'redis ...
- typescript 入门教程四
ts中的function和接口 interface PrintCallback{ // 匿名函數,返回类型为空 (success:boolean):void } interface Person{ / ...
- dotnetcore 与 hbase 之三——c# for hbase 客户端的使用
说明 在上一篇文章dotnetcore 与 hbase 之二--thrift 客户端的制作中已经可以找到 c# hbase 客户端的使用方法了,为什么这里单独列出一篇文章来讲述呢?最简单的理由就是,本 ...
- 常用NLog配置
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSe ...