原题链接:
题解:
求拓扑序列是一层层来的,因此适合采用bfs。
只有有向无环图才有拓扑序列,因此可以用于(环检测)
AcWing 848. 拓扑排序--思路介绍+图解模拟+详细代码注释 - AcWing
代码:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
vector<int> v[N];
vector<int> res;
int in[N];
int n, m;
void topsort() {
queue<int> q;
for (int i = 1;i <= n;i++) {
if (!in[i]) q.push(i);
}
while (q.size()) {
int F = q.front();
res.push_back(F);
q.pop();
for (int i = 0;i < v[F].size();i++) {
in[v[F][i]]--;
if (!in[v[F][i]])
q.push(v[F][i]);
}
}
if (res.size() == n)
for (auto i : res) cout << i << " ";
else
cout << -1;
}
int main() {
cin >> n >> m;
for (int i = 0;i < m;i++) {
int x, y;cin >> x >> y;
v[x].push_back(y);
in[y]++;
}
topsort();
}