原题链接:
题解:
ballman_ford以及spfa都可以用于判断负环
代码:
相比之下,还是spfa效果更好一些
Ballman_ford判断:
#include<bits/stdc++.h>
using namespace std;
const int N = 2e3 + 10, M = 1e4 + 10;
struct Edge {
int a, b, w;
}edge[M];
int dis[N];
int n, m, k;
string bellman_ford() {
bool flag = true;
int cnt = 0;
while (flag)
{
flag = false;
cnt++;
if (cnt > n) return "Yes"; //迭代超过n次根据抽屉原理出现了n+1个点既出现了负环
for (int i = 0;i < m;i++)
{
int a = edge[i].a, b = edge[i].b, w = edge[i].w;
if (dis[b] > dis[a] + w)
{
flag = true;
dis[b] = dis[a] + w;
}
}
}
return "No";
}
int main() {
cin >> n >> m;
for (int i = 0;i &l