Bellman—Ford算法思想
---恢复内容开始---
Bellman—Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题。对于给定的带权(有向或无向)图G=(V,E),其源点为s,加权函数w是边集E的映射。对图G运行Bellman—Ford算法的结果是一个布尔值,表明图中是否存在着一个从源点s可达的负权回路。若存在负权回路,单源点最短路径问题无解;若不存在这样的回路,算法将给出从源点s到图G的任意顶点v的最短路径值d[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算法思想的更多相关文章
- Bellman - Ford 算法解决最短路径问题
		
Bellman - Ford 算法: 一:基本算法 对于单源最短路径问题,上一篇文章中介绍了 Dijkstra 算法,但是由于 Dijkstra 算法局限于解决非负权的最短路径问题,对于带负权的图就力 ...
 - Dijkstra算法与Bellman - Ford算法示例(源自网上大牛的博客)【图论】
		
题意:题目大意:有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离 poj2387 Description Bessie is out in the field and ...
 - 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次松弛时,还能 ...
 - ACM/ICPC 之 最短路径-Bellman Ford范例(POJ1556-POJ2240)
		
两道Bellman Ford解最短路的范例,Bellman Ford只是一种最短路的方法,两道都可以用dijkstra, SPFA做. Bellman Ford解法是将每条边遍历一次,遍历一次所有边可 ...
 - 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)
		
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...
 - AC自动机——多模式串匹配的算法思想
		
标准KMP算法用于单一模式串的匹配,即在母串中寻求一个模式串的匹配,但是现在又存在这样的一个问题,如果同时给出多个模式串,要求找到这一系列模式串在母串存在的匹配个数,我们应该如何处理呢? 基于KMP算 ...
 - [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
		
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...
 - JVM三种垃圾收集算法思想及发展过程
		
JVM垃圾收集算法的具体实现有很多种,本文只是介绍实现这些垃圾收集算法的三种思想和发展过程.所有的垃圾收集算法的具体实现都是遵循这三种算法思想而实现的. 1.标记-清除算法 标记-清除(Mark-Sw ...
 
随机推荐
- 成都优步uber司机第三组奖励政策
			
今天成都优步又推出了优步司机第三组,第一二组的奖励大家都晓得,但是第三组的奖励怎么样呢?还是先看看官方给出的消息. 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册 ...
 - LeetCode: 56. Merge Intervals(Medium)
			
1. 原题链接 https://leetcode.com/problems/merge-intervals/description/ 2. 题目要求 给定一个Interval对象集合,然后对重叠的区域 ...
 - ORB-SLAM(十)LoopClosing Sim3求解
			
主要参考这篇论文 Horn B K P. Closed-form solution of absolute orientation using unit quaternions[J]. JOSA A, ...
 - 图片文件转换成Base64编码实现ajax提交图片
			
//上传头像图片 function uploadHead(imgPath) { console.log("imgPath = " + imgPath); var image = n ...
 - meta-data获取小结
			
android 开发中: 在AndroidManifest.xml中,<meta-data>元素可以作为子元素, 被包含在<activity>.<applicat ...
 - Linux命令应用大词典-第35章 终端
			
35.1 tty:显示当前连接到当前标准输入的终端设备文件名 35.2 consoletype:显示连接到标准输入的控制台类型 35.3 fgconsole:显示活动的虚拟终端数量 35.4 ming ...
 - tpo-08 C2 A strategy for attracting customers
			
第 1 段 1.Listen to a conversation between a student and a business professor. 听一段学生和教授的对话. 第 2 段 1.So ...
 - JVM之G1收集器
			
Garbage-First,面向服务端的垃圾收集器. 并行与并发:充分利用多核环境减少停顿时间, 分代收集:不需要配合其它收集器 空间整合:整体上看属于标记整理算法,局部(region之间)数据复制算 ...
 - 洪水!(Flooded! ACM/ICPC World Final 1999,UVa815)
			
题目描述:竞赛入门经典的习题4-10 解题思路:1.把各个网格想象成一个数组 2.排序 3.雨水总体积去铺满 //太懒了只写了求海拔 #include <stdio.h> #define ...
 - 菜鸟之路——机器学习之决策树个人理解及Python实现
			
最近开始学习机器学习,以下会记录我学习中遇到的问题以及我个人的理解 决策树算法,网上很多介绍,在这不复制粘贴.下面解释几个关键词就好. 信息熵(entropy):就是信息不确定性的多少 H(x)=-Σ ...