题解 | #【模板】拓扑排序#
【模板】拓扑排序
https://www.nowcoder.com/practice/88f7e156ca7d43a1a535f619cd3f495c
//拓扑排序模板 #include <bits/stdc++.h> using namespace std; #define MAX 200001 int main() { int n, m; cin >> n >> m; vector<int> adjlist[MAX]; // 邻接链表vector容器 int inDegree[MAX] = {0}; // 记录入度数组 int a, b; for(int i = 0; i < m; i++) { cin >> a >> b; adjlist[a].push_back(b); inDegree[b]++; } queue<int> que; for(int i = 1; i <= n; i++) { if(inDegree[i] == 0) que.push(i); } int cnt = 0; // 判断是否存在环 vector<int> res; // 用于存储结果 while(!que.empty()) { int u = que.front(); que.pop(); res.push_back(u); for(int i = 0; i < adjlist[u].size(); i++) { int v = adjlist[u][i]; inDegree[v]--; if(inDegree[v] == 0) que.push(v); } cnt++; } if(cnt == n){ for(int i = 0; i < res.size(); i++) { cout << res[i]; if(i != res.size() - 1)cout << " "; } } else { cout << -1; } } // 64 位输出请用 printf("%lld")