专栏文章
题解:AT_past202107_j 終わりなき旅
AT_past202107_j题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipk1jbv
- 此快照首次捕获于
- 2025/12/03 13:16 3 个月前
- 此快照最后确认于
- 2025/12/03 13:16 3 个月前
拓扑排序判环
适用场景:需要输出拓扑序或判断有向无环图。
时间复杂度:O(V+E)
#include<bits/stdc++.h>
using namespace std;
const int N = ; //自己定义
vector G[N];
int n, m, du[N];
bool check(int n) {
queue q;
int cnt = 0; //记录拓扑序的节点数
for (int i = 1; i <= n; i++) for (int v : G[i]) du[v]++; //初始化入度
for (int i = 1; i <= n; i++) if (du[i] == 0) q.push(i); //入度为0的节点入队
//BFS拓扑排序
while (!q.empty()) {
int u = q.front();
q.pop();
cnt++;
for (int v : G[u]) {
du[v]--;
if (du[v] == 0) q.push(v);
}
}
return cnt != n; //若拓扑序节点数不足n,说明有环
}
int main() {
cin >> n >> m;
while (m--) {
int u, v;
cin >> u >> v;
G[u].push_back(v);
}
cout << (check(n) ? "有环" : "无环");
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...