拓扑排序
#include <iostream> #include <vector> #include <cstring> using namespace std; const int N=1e5+5; int h[N], e[N], ne[N], indegree[N], idx; int head, tail, queue[N]; void add(int x, int y){ e[idx] = y; ne[idx] = h[x]; h[x] = idx++; } void tpSort(int n){ head = 0; tail = -1; for (int i=1; i<=n; i++){ if (indegree[i]==0) queue[++tail] = i; } while (head<=tail){ int node = queue[head++]; for (int i = h[node]; i != -1; i =ne[i]){ int j = e[i]; indegree[j]--; if (indegree[j]==0) queue[++tail] = j; } } if (tail != n-1) cout << -1; else { for (int i=0; i<n; i++) cout<<queue[i]<<" "; } } int main(){ int n, m, x, y; cin >> n >> m; memset(h, -1, sizeof h); for (int i=0; i<m; i++) { cin >> x >> y; add(x, y); indegree[y] ++; } tpSort(n); return 0; }