看来一千个acmer有一千个迪杰斯特拉,Bellman-Ford也是一样。

看了刘汝佳的bellman-ford,简直和spfa一模一样啊!!!

松弛n -1 次还是可以松弛,说明有负环;

刘汝佳写得很有水平,学习了。每个点都有可能从这个点出发找到负环,都入队列,相互间分开,找第一个点,找到负边,入对列,原来的点出队列,下次有可能还用到; 该点不是最优的。要搜索该点。下次同等级别的点找到该点,就不用push到队列中了!!!

 

当下次还可以通过其他点松弛他cnt++;他又被松弛了;如果他被松弛了好多好多次(n-1);这样下去的只能说明一个问题:已经没有最短路,有的只是一个负圈;因为,既然可以通过好多好多点通过这个点继续找到更近的路,而这些点早可以够成了一条最短路了,什么情况这个点可以被松弛好多好多次呢,就是这个点存在于一个负圈里面,其他点到这个点转一圈 d 又减小了;

#include <bits/stdc++.h>
using namespace std;const int maxn = 10000;struct Edge
{int from,to;double dist;
};struct BellmanFord
{int n, m;vector<Edge> edges;vector<int> G[maxn];bool inq[maxn];double 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, double 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;}
};

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

Bellman-Ford相关推荐

  1. C++实现bellman ford贝尔曼-福特算法(最短路径)(附完整源码)

    C++实现bellman ford贝尔曼-福特算法 实现bellman ford贝尔曼-福特算法的完整源码(定义,实现,main函数测试) 实现bellman ford贝尔曼-福特算法的完整源码(定义 ...

  2. bellman ford 算法 判断是否存在负环

    Flyer 目录视图 摘要视图 订阅 微信小程序实战项目--点餐系统        程序员11月书讯,评论得书啦        Get IT技能知识库,50个领域一键直达 关闭 bellman for ...

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

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

  4. Bellman——Ford算法

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

  5. bellman - ford算法c++

    (最短路III)bellman - ford算法(适用于含负权边的图) 注意:用该算法求最短路,在有边数限制的情况下可以存在负权回路!且对所走的边的数量有要求时只能用该算法实现! 解析:因为如果没有边 ...

  6. Bellman Ford算法详解

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

  7. 图解Bellman Ford算法

    Bellman Ford 单源最短路径算法[中字] Bellman Ford 单源最短路径算法[中字]_哔哩哔哩_bilibili 贝尔曼-福特算法(Bellman–Ford algorithm )油 ...

  8. LeetCode 787. K 站中转内最便宜的航班(图/Bellman Ford算法)

    文章目录 贝尔曼-福特算法(Bellman-Ford) 简介 算法思想 算法执行过程 应用 题目描述 分析 代码 LeetCode 787. K 站中转内最便宜的航班 题目描述 Bellman For ...

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

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

  10. bellman ford 算法

    Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的.这时候,就需要使用其他的算法来求解最短 ...

最新文章

  1. SVO 学习笔记(三)
  2. 用Azure VM + Azure Database for MySQL搭建Web服务
  3. Android 中加载网络资源时的优化 缓存和异步机制
  4. java web jsp相对路径_Java Web中的相对路径与绝对路径总结
  5. 《Java从入门到放弃》JavaSE入门篇:文件操作
  6. P1852-跳跳棋【思维,差分,二分】
  7. 项目过程总结 和某个字段的更新
  8. lightning接口_苹果、安卓充电接口有望统一,欧盟重压下,苹果将不得不妥协
  9. linux mysql workbench 安装_Ubuntu 20.04 上 MySQL Workbench 安装和使用图文详解
  10. BSH验厂介绍BSH博世社会责任审核内容
  11. 上传图片到淘宝接口调用展示
  12. 在linux上通过yum安装JDK
  13. TCP/IP路由技术(第1卷)(第2版) + TCP/IP路由技术(第2卷)(第2版)
  14. 自然语言处理NLP简介
  15. WPF textbox禁用输入法
  16. 第14章 14.1 来自Bitly的USA.gov数据(1)
  17. SICK LMS 111激光雷达数据读取与分析
  18. 3ds_max入门教程
  19. 二手房买卖信息管理系统
  20. u盘无法识别怎么办?看完不愁数据恢复

热门文章

  1. C++ string(转)
  2. python中如何快速判断一个值是否大于、小于、等于某个值?
  3. 在MATLAB和OpenCV环境下写的灰度图像分段线性变换源码
  4. java 隐藏地址栏参数_要想在浏览器的地址栏上的URL中隐藏传输的参数,需要将form标签的method属性值设置为( )。 (5.0分)_学小易找答案...
  5. 审车按月还是日期_新手都该知道的审车流程!
  6. xxl子任务_阿里面试官:聊一下分布式任务调度有那些解决方案?
  7. linux内核网络协议栈--linux协议栈调用流程(七)
  8. 16进制数组转成10进制 qt_计算机组成原理(进制数及转换)
  9. 使用C#格式化字符串 1
  10. 用一个实际例子理解Docker volume工作原理