时间复杂度是 O(nm), n 表示点数,m 表示边数

int n;      // 总点数
int h[N], w[N], e[N], ne[N], idx;       // 邻接表存储所有边
int dist[N], cnt[N];        // dist[x]存储1号点到x的最短距离,cnt[x]存储1到x的最短路中经过的点数
bool st[N];     // 存储每个点是否在队列中// 如果存在负环,则返回true,否则返回false。
bool spfa()
{// 不需要初始化dist数组// 原理:如果某条最短路径上有n个点(除了自己),那么加上自己之后一共有n+1个点,由抽屉原理一定有两个点相同,所以存在环。queue<int> q;for (int i = 1; i <= n; i ++ ){q.push(i);st[i] = true;}while (q.size()){auto t = q.front();q.pop();st[t] = false;for (int i = h[t]; i != -1; i = ne[i]){int j = e[i];if (dist[j] > dist[t] + w[i]){dist[j] = dist[t] + w[i];cnt[j] = cnt[t] + 1;if (cnt[j] >= n) return true;       // 如果从1号点到x的最短路中包含至少n个点(不包括自己),则说明存在环if (!st[j]){q.push(j);st[j] = true;}}}}return false;
}

~~spfa判断图中是否存在负环相关推荐

  1. 【POJ - 3259 】Wormholes(Bellman_Ford或spfa算法,判断有向图中是否存在负环)

    题干: 农夫约翰在探索他的许多农场,发现了一些惊人的虫洞.虫洞是很奇特的,因为它是一个单向通道,可让你进入虫洞的前达到目的地!他的N(1≤N≤500)个农场被编号为1..N,之间有M(1≤M≤2500 ...

  2. 判断图中是否存在环的方法

    判断图中是否存在环一般有四种方法:① 拓扑排序(对于有向图来说的),一般会结合dp求解最长/短路径: ② 强连通分量算法/双连通分量算法: ③ spfa判环 :④ 直接dfs遍历一遍,在遍历节点的过程 ...

  3. 用两种遍历方法判断图中两点是否有路径

    用两种遍历方法判断图中两点是否有路径(可直接测试) 邻接表.图.图的两种遍历以及图中路径的基本概念,可以去自行了解和学习(下面是代码实践)可直接在自己主机测试 #include <iostrea ...

  4. jquery判断方法是否存在_判断图中是否有环的三种方法

    0.什么是环? 在图论中,环(英语:cycle)是一条只有第一个和最后一个顶点重复的非空路径. 在有向图中,一个结点经过两种路线到达另一个结点,未必形成环. 1.拓扑排序 1.1.无向图 使用拓扑排序 ...

  5. 如何判断图中存环(正负)

    1.正环 用 SPFA不断的进行松弛操作,发现当前金额可以比本身大就更新,同时记录更新次数.如果更新次数超过n次,说明存在"正"环. 2.负环 这里先说明下负环.(求最短距离的时候 ...

  6. aop判断方法是否执行成功_判断图中是否有环的三种方法

    0.什么是环? 在图论中,环(英语:cycle)是一条只有第一个和最后一个顶点重复的非空路径. 在有向图中,一个结点经过两种路线到达另一个结点,未必形成环. 1.拓扑排序 1.1.无向图 使用拓扑排序 ...

  7. AcWing 904. 虫洞(SPFA or Djakarta or bellman判负环)

    题目连接 http://poj.org/problem?id=3259 思路 大概是想问我们能不能找到一个负环,那么再看一眼数据范围,500,感觉乱搞都能过,但是出题人很恶心啊,n的范围并不是500, ...

  8. java判断图中两点是否连通_连通分量(求有几个连通分量+判断是否两点连通+是否为强联通图 相应例子)...

    参考博客: https://blog.csdn.net/jinzk123/article/details/52231527 https://blog.csdn.net/qq_40998706/arti ...

  9. 图11——判断图中是否为一棵树

    编写算法,判断一个无向图是否是一颗树. [分析] 一个无向图G是一棵树的条件为:G必须是无回路的连通图或n-1条边的连通图,这里我们采用后者作为判断条件.例如下图所示: 上面的无向图就是一棵树,它有6 ...

最新文章

  1. [51nod1238] 最小公倍数之和 V3(杜教筛)
  2. mac 安装 nginx
  3. 服务器开好服怎么和网站连,vps开服连服务器没反应
  4. 数据复盘《糖豆人》爆火营销过程:怎么做到以小博大?
  5. 颜色协调模型Color Harmoniztion
  6. Python 基础 - 4.3 random模块
  7. gdb学习(一)[第二版]
  8. Session共享的四种方法
  9. tomcat启动问题,卡在 preparing launch delegate 100% 的解决方法
  10. 商务利器 HAWK浩客G580无线演示器试用
  11. android 扩展textview,Android可收缩/扩展的TextView【1】
  12. 《JavaScript高级程序设计 第三版》学习笔记 (十三)高级函数
  13. 洛谷P3966 [TJOI2013]单词 题解
  14. 我的未来,何去何从?
  15. conda命令报错Collecting package metadata (repodata.json): failed
  16. python有哪些细节描写_细节描写训练,莫失良机
  17. 英语议论文万能模板范文 英语作文范文欣赏
  18. 使用2345安全卫士后打开浏览器主页锁定为2345
  19. windows下安装Python和安装Python解释器
  20. Accumulation Degree题解

热门文章

  1. 未从创建控件的线程访问解决办法
  2. php jmail 乱码,ASP实例:解决Jmail发送邮件标题出现乱码
  3. 05引用类型以及特殊引用类型string
  4. 各大浏览器保存密码的文件
  5. ZOJ 3867 Earthstone: Easy Version
  6. SQL Server创建视图
  7. 开源.Net邮件服务器-LumiSoft Mail Server简介
  8. 《剑指 Offer I》刷题笔记 51 ~ 61 题
  9. 软件设计师09-面向对象-图集
  10. Windows服务器管理(4)——WinServer2008/2008R2系统 安装AD域控及DNS服务器