数据结构与算法学习笔记----SPFA判断负环

数据结构与算法学习笔记----SPFA判断负环

@@ author: 明月清了个风

@@ first publish time: 2024.12.19

ps⭐️思路在题目里面

Acwing 852. spfa判断负环

原题链接\]([852. spfa判断负环 - AcWing题库](https://www.acwing.com/problem/content/854/)) 给定一个 n n n个点 m m m条边的有向图,图中可能存在重边和自环,边权可能为负数。 请你判断图中是否存在负权回路。 #### 输入格式 第一行包含三个整数 n n n, m m m。 接下来 m m m行,每行包含三个整数 x x x、 y y y、 z z z,表示存在一条从点 x x x到点 y y y的有向边,边长为 z z z。 #### 输出格式 如果图中**存在** 负权回路,则输出 `Yes`,否则输出 `No`。 #### 数据范围 1 ≤ n ≤ 2000 1 \\leq n \\leq 2000 1≤n≤2000, 1 ≤ m ≤ 10000 1 \\leq m \\leq 10000 1≤m≤10000, 图中涉及边长均不超过10000。 #### 思路 spfa判断负环的逻辑和bellman-ford一样,**n n n个点的图最长的路径中最多只有 n − 1 n-1 n−1条边** ,因此如果有一条路径能被更新 n n n次就说明有负环存在 **注意点**: 1. 队列中初始要加入所有点,因为并不知道负环在哪条路径上。 2. 距离不用初始化,都是 0 0 0即可,负权可以更新距离。 #### 代码 ```cpp #include #include #include #include #include using namespace std; const int N = 2010, M = 10010; int dist[N]; int cnt[N]; bool st[N]; int h[N], e[M], w[M], ne[M], idx; int n, m; void add(int a, int b, int c) { e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++; } bool spfa() { queue q; for(int i = 1; i <= n; i ++) { q.push(i); st[i] = true; } while(q.size()) { int 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; if(!st[j]) { q.push(j); st[j] = true; } } } } return false; } int main() { cin >> n >> m; memset(h, -1, sizeof h); for(int i = 0; i < m; i ++) { int a, b, c; cin >> a >> b >> c; add(a, b, c); } if(spfa()) puts("Yes"); else puts("No"); return 0; } ```

相关推荐
[H*]1 分钟前
鸿蒙跨端Flutter学习:InheritedWidget嵌套使用
学习·flutter
weixin_440730503 分钟前
02测试基础知识笔记
笔记
2501_941864963 分钟前
科学记忆法提升学习效率
学习
就叫飞六吧4 分钟前
Jenkins 流水线全流程实战笔记
笔记·servlet·jenkins
好奇龙猫7 分钟前
【日语学习-日语知识点小记-日本語体系構造-JLPT-N2前期阶段-第一阶段(4):单词语法】
学习
别了,李亚普诺夫14 分钟前
运算放大器的参数、选型与应用-学习笔记
笔记·学习
知识分享小能手23 分钟前
Oracle 19c入门学习教程,从入门到精通,PL/SQL 编程详解:语法、使用方法与综合案例(6)
sql·学习·oracle
richxu2025100126 分钟前
嵌入式学习之路->stm32篇-->(8)I2C通讯(上)
stm32·嵌入式硬件·学习
行业探路者32 分钟前
如何利用二维码提升富媒体展示的效果?
大数据·人工智能·学习·产品运营·软件工程
中屹指纹浏览器32 分钟前
指纹浏览器网络隔离与泄漏防护技术全解析——从架构设计到落地实践摘要
经验分享·笔记