---恢复内容开始---

Bellman—Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题。对于给定的带权(有向或无向)图G=(V,E),其源点为s,加权函数w是边集E的映射。对图G运行Bellman—Ford算法的结果是一个布尔值,表明图中是否存在着一个从源点s可达的负权回路。若存在负权回路,单源点最短路径问题无解;若不存在这样的回路,算法将给出从源点s到图G的任意顶点v的最短路径值d[v]

Bellman—Ford算法流程

分为三个阶段:
      (1)初始化:将除源点外的所有顶点的最短距离估计值
         dis[v]ß+∞,dis[s]ß0;
      (2)迭代求解:反复对边集E中的每条边进行松弛操作,使得顶点集v中的每个顶点v的最短距离估计值逐步逼近其最短距离;
      (3)检验负权回路:判断边集E中的每一条边的两个端点是否收敛。如果存在未收敛的顶点,则算法返回false,表明问题无解;否则算法返回true,并且从源点可达的顶点v的最短距离保存在dis[v]中。
 
【程序】
 {单源最短路径的Bellman-ford算法执行v-1次,每次对每条边进行松弛操作如有负权回路则输出"Error"}
const
maxn=;
maxe=maxn*(maxn-)div ;
type
edge=record
a,b,w :integer;
end;
var
edges :array[..maxe]of edge;
dis :array[..maxn]of integer;
pre :array[..maxn]of integer;
e,n,s :integer;
procedure init;
var
i :integer;
begin
e:=;
assign(input,'g.in');reset(input);
readln(n,s);
while not eof do
begin
inc(e);
with edges[e] do readln(a,b,w);
end;
fillchar(dis,sizeof(dis),$7f);//初始值为无穷大
dis[s]:=;pre[s]:=s;
end;
procedure relax(u,v,w:integer);
begin
if dis[u]+w<dis[v] then
begin
dis[v]:=dis[u]+w;
pre[v]:=u;
end
end;
function bellman_ford:boolean;
var
i,j :integer;
begin
for i:= to n- do
for j:= to e do
with edges[j] do relax(a,b,w);
for i:= to e do
with edges[i] do
if dis[a]+w<dis[b] then exit(false);
exit(true)
end;
procedure print_path(i:integer);
begin
if pre[i]<>s then print_path(pre[i]);
write('-->',i)
end;
procedure show;
var
i :integer;
begin
for i:= to n do
begin
write(i:,':',dis[i]:,':',s);
print_path(i);
writeln
end;
end;
{========main========}
begin
init;
if bellman_ford then show
else writeln('Error!!')
end.

---恢复内容结束---

Bellman—Ford算法思想的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...

  7. AC自动机——多模式串匹配的算法思想

    标准KMP算法用于单一模式串的匹配,即在母串中寻求一个模式串的匹配,但是现在又存在这样的一个问题,如果同时给出多个模式串,要求找到这一系列模式串在母串存在的匹配个数,我们应该如何处理呢? 基于KMP算 ...

  8. [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...

  9. JVM三种垃圾收集算法思想及发展过程

    JVM垃圾收集算法的具体实现有很多种,本文只是介绍实现这些垃圾收集算法的三种思想和发展过程.所有的垃圾收集算法的具体实现都是遵循这三种算法思想而实现的. 1.标记-清除算法 标记-清除(Mark-Sw ...

随机推荐

  1. 北京Uber优步司机奖励政策(12月13日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  2. 韩国KT软件NB-IOT开发记录V150(2)FOTA差分包生成

    1. 生成差分包

  3. MYSQL order by排序与索引关系总结

    MySQL InnoDB B-Tree索引使用Tips 这里主要讨论一下InnoDB B-Tree索引的使用,不提设计,只管使用.B-Tree索引主要作用于WHERE和ORDER BY子句.这里讨论的 ...

  4. python中的class正确用法

    class Dog: def __init__(self, name): self.name = name self.tricks = [] # creates a new empty list fo ...

  5. coolshell里的一些c++文章

    c++数组不支持多态 https://coolshell.cn/articles/9543.htmlwhy gcc in c++ https://airs.com/ian/cxx-slides.pdf ...

  6. 学会了vim中的自动补全功能

    好开心,再也不用再多个工具之间切换了,哈哈 擦,功能太弱

  7. Android Test和Logcat

    一 测试相关概念 是否有源码 黑盒测试: 测试工具 白盒测试: 对所有的源码特别熟悉 对特定的代码进行测试 都是编程 时间 单元测试(程序员) 模块测试 集成测试 系统测试 回归测试(改bug) 压力 ...

  8. C++11 type_traits 之is_convertible源码分析

    请看源码: struct __sfinae_types { typedef char __one; typedef ]; } __two; }; template<typename _From, ...

  9. Java应用基础微专业-工程篇

    第1章-命令行 1.1 命令行基础 ls -a: list all files (including hidden files) .DS_Store: files detailed informati ...

  10. Python常用函数--文档字符串DocStrings

    Python 有一个甚是优美的功能称作python文档字符串(Documentation Strings),在称呼它时通常会使用另一个短一些的名字docstrings.DocStrings 是一款你应 ...