这几天学校女生节,挺累的,感觉还是挺好玩的,前几天看了一下最短路,Bellman-fort算法果然比较厉害,今天又参考了刘汝佳的两本书,有了一点新的认识。

废话不说,先上代码:

#include <bits/stdc++.h>
using namespace std;const int INF = 0x3f3f3f3f;
const int maxn = 1000;struct Edge
{int from,to;int dist;
};struct BellmanFord
{int n,m;vector<Edge> edges;vector<int> G[maxn];bool inq[maxn];int d[maxn];int p[maxn];int cnt[maxn];void init(int n){this->n = n;for(int i=0; i<n; i++) G[i].clear();edges.clear();}void AddEdge(int from,int to,int dist){edges.push_back((Edge){from,to,dist});m = edges.size();G[from].push_back(m-1);}bool negativeCycle(int s){queue<int> Q;memset(inq,0,sizeof(inq));memset(cnt,0,sizeof(cnt));for(int i=0; i<n; i++){d[i] = INF;}d[s] = 0;inq[s] = true;Q.push(s);while(!Q.empty()){int u = Q.front();Q.pop();inq[u] = false;for(int i=0; i<G[u].size(); i++){Edge& e = edges[G[u][i]];if(d[u]<INF&&d[e.to]>d[u]+e.dist){d[e.to] = d[u] + e.dist;p[e.to] = G[u][i];if(!inq[e.to]){Q.push(e.to);inq[e.to] = true;if(++cnt[e.to]>n)return false;}}}}return true;}};struct BellmanFord
{int n,m;vector<Edge> edges;vector<int> G[maxn];bool inq[maxn];int d[maxn];int p[maxn];int cnt[maxn];void init(int n){this->n = n;for(int i=0; i<n; i++) G[i].clear();edges.clear();}void AddEdge(int from,int to,int dist){edges.push_back((Edge){from,to,dist});m = edges.size();G[from].push_back(m-1);}bool negativeCycle(){queue<int> Q;memset(inq,0,sizeof(inq));memset(cnt,0,sizeof(cnt));for(int i=0; i<n; i++){d[i] = 0;inq[0] = true;Q.push(i);}while(!Q.empty()){int u = Q.front();Q.pop();inq[u] = false;for(int i=0; i<G[u].size(); i++){Edge& e = edges[G[u][i]];if(d[e.to]>d[u]+e.dist){d[e.to] = d[u] + e.dist;p[e.to] = G[u][i];if(!inq[e.to]) {Q.push(e.to);inq[e.to] = true;if(++cnt[e.to]>n)return true;}}}}return false;}};

View Code

第一个Bellman-Ford算法是紫书上的;

解析:

1、起点入队列

2、初始化点到起点的距离是INF;

3、和Dijkstra相比,每个结点可以多次加入(如果有负环,那么这个结点是可以多次松弛的,一旦次数无穷就说明了这的确是个负环);

4、因为是从起点出发的,然后在搜索邻接表,没有找到负环,只能说明,从起点到不了负环,但是可能是有负环的。没有负环,最短路数组 d 是正确可用的。

第二个Bellman-Ford算法是白书上的;

解析:

1、Bellman-Ford 算法一个重要应用就是判负环,上面的一个起点入队列,就要改成所有点入队列。

2、初始化 d 数组为 0:

  可以从第二图中,有一个负环,但是从 0 ,无法松弛;但是,在队列中,从 1 开始搜索的时候,还是可以松弛,并且找到这个负环;然后由于每个结点之前都入过队列,就能保证找到那个负环。

转载于:https://www.cnblogs.com/TreeDream/p/6123476.html

再谈Bellman-Ford相关推荐

  1. SPFA or bellman ford松弛法--单源最短路

    问题概述:有编号1-n的n个站点,有m条公交车路线,公交车只从一个起点站直接到达终点站,是单向的且每条路线有它自己的车费,有P个人早上从1出发,他们要到达每一个公交站点,然后到了晚上再返回点1,求所有 ...

  2. Bellman——Ford算法

    Bellman--Ford 算法介绍 思路讲解 案例分析与代码实现 案例分析 代码实现 优先队列优化(SPFA) 优化原理 代码实现 算法介绍 我们知道Dijkstra算法只能用来解决正权图的单源最短 ...

  3. Bellman Ford算法详解

    一.用途 1. Bellman Ford算法是解决拥有负权边最短路问题的方法之一.还有一种方法是SPFA算法. 2. 二者相比,SPFA算法在效率方面是优于Bellman Ford算法的.但在某些情况 ...

  4. Bellman ford算法(贝尔曼·福特算法)

    Bellman - ford算法是求含负权图的单源最短路径的一种算法,效率较低,代码难度较小.其原理为连续进行松弛,在每次松弛时把每条边都更新一下,若在n-1次松弛后还能更新,则说明图中有负环,因此无 ...

  5. 再谈JSON -json定义及数据类型

    再谈json 近期在项目中使用到了highcharts ,highstock做了一些统计分析.使用jQuery ajax那就不得不使用json, 可是在使用过程中也出现了非常多的疑惑,比方说,什么情况 ...

  6. C++_动态绑定,再谈const,new,delete

    C++_动态绑定,再谈const,new,delete

  7. 再谈HTTP2性能提升之背后原理—HTTP2历史解剖

    即使千辛万苦,还是把网站升级到http2了,遇坑如<phpcms v9站http升级到https加http2遇到到坑>. 因为理论相比于 HTTP 1.x ,在同时兼容 HTTP/1.1 ...

  8. 再谈工作的主动性和有效提问

    主动性是一个非常奇怪的词,每个人对这个词的理解都不一样.可能一个管理者对员工说,你要提高主动性,但是员工会非常苦恼,甚至崩溃:我都天天加班了,你居然还在谈提高主动性? 结合很多应届生在实际工作中遇到的 ...

  9. 再谈符号间干扰(一)

    在对话通信原理系列相关博文中,有这么一篇博文:通信系统之信道,这篇博文里面已经讲过符号间干扰(ISI),发生符号间干扰的原因在于信号带宽大于相干带宽,同一个意思的表达为:发送符号的周期小于最大时延扩展 ...

  10. 我的WCF之旅 (11): 再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯...

    在一个基于面向服务的分布式环境中,借助一个标准的.平台无关的Communication Infrastructure,各个Service通过SOAP Message实现相互之间的交互.这个交互的过程实 ...

最新文章

  1. H5进阶篇--实现微信摇一摇功能
  2. 三十三、Java集合中的LinkedList
  3. linux shell的输出效果修改方法(界面颜色)
  4. jps命令:查看Java进程等详细信息
  5. php 清除指定session,PHP如何操作指定的session?
  6. 正则表达式的几个简单验证
  7. 人脸方向学习(十一):Face Landmark Detection-PFLD解读
  8. 一款非常好看的婚纱请柬设计英文字体
  9. 人物回眸效果怎么用Vegas设置
  10. 从程序员的角度分析微信小程序(编程语言:用到什么学什么)
  11. 锅炉实现物联网云平台方案
  12. task04 办公自动化之Python 操作 PDF
  13. SSO(Single Sign On):原理与使用
  14. 如何搭建一个react项目?
  15. 整车控制器(VCU)的功能
  16. 格式工厂 wav 比特率_【资源分享】格式工厂FORMAT FACTORY-5.1.0
  17. 无胁科技-TVD每日漏洞情报-2022-7-20
  18. Java初学者——小白篇(一)
  19. RiPro主题-子主题huzao-child美化包v4.0带更新(附下载插件)
  20. About email

热门文章

  1. 一张速查表看懂Git命令,搞定版本控制照做就ok丨新手福利
  2. 近千人点赞!哈佛博士放出超多资源,机器学习课程教程小抄全都有
  3. Facebook语音助手Aloha细节曝光,它的logo竟然是一座小火山?
  4. “众矢之的”马库斯回应14个问题,将深度学习质疑到底
  5. 新年快乐!这是份值得收藏的2017年AI与深度学习要点大全
  6. 2019年上海地区最新JAVAEE开发面试与笔试题
  7. [IOI2005]Riv 河流
  8. 网站漏洞修复方案防止SQL注入攻击漏洞
  9. nginx完全关闭log
  10. 去哪网实习总结:JavaWeb配置404页面(JavaWeb)