拓扑排序
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int maxn = 100 + 5;
vector<int> G[maxn];
int deg[maxn];
int n;
vector<int> ans;
int main(int argc, char const *argv[]) {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
int x;
while (scanf("%d", &x) == 1 && x) {
G[i].push_back(x);
deg[x]++;
}
}
queue<int> q;
for (int i = 1; i <= n; i++) {
if (deg[i] == 0) {
q.push(i);
}
}
while (!q.empty()) {
int v = q.front();
q.pop();
ans.push_back(v);
for (int i = 0; i < G[v].size(); i++) {
int u = G[v][i];
if (--deg[u] == 0) {
q.push(u);
}
}
}
for (int i = 0; i < ans.size(); i++) {
if (i) {
putchar(' ');
}
printf("%d", ans[i]);
}
putchar('\n');
return 0;
}