#include <iostream>
#include <vector>
#include <queue>
using namespace std;
constexpr int N = 1e3+5;
int n,m;
vector<int> edges[N];
vector<int> indegree(N,0);
vector<int> ans_sequence;
bool topo_sort() {
queue<int> q;
int cnt = 0;
for(int i = 1;i<=n;++i) {
if(indegree[i]==0) {
q.emplace(i);
cnt++;
}
}
while(!q.empty()) {
auto t = q.front();
q.pop();
ans_sequence.emplace_back(t);
for(int &i:edges[t]) {
if(--indegree[i]==0) {
cnt++;
q.emplace(i);
}
}
}
if(cnt<n) return false;
return true;
}
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n >> m;
while(m--) {
int x,y;
edges[x].emplace_back(y);
++indegree[y];
}
if(topo_sort()) {
for(int i = 0;i<ans_sequence.size();++i) {
cout << ans_sequence[i] << " \n"[i==ans_sequence.size()-1];
}
}else {
cout << "topo sort failed!\n";
}
return 0;
}
C++ 拓扑排序模板
最新推荐文章于 2024-07-08 21:32:26 发布