Topologic Sorting Algorithm!
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int n;
int main(void) {
cin >> n;
vector<vector<int>> g(n + 1); // directed graph (有向图)
vector<int> indegrees(n + 1); // indegrees table (入度表)
for (int i = 1; i <= n; ++i) {
int nei; // nei == neighbour
while (cin >> nei, nei) {
g[i].emplace_back(nei);
++indegrees[nei];
}
}
queue<int> q;
for (int i = 1; i <= n; ++i)
if (!indegrees[i]) q.emplace(i);
while (not q.empty()) {
const int cur = q.front(); q.pop();
printf("%d ", cur);
for (const auto& nei : g[cur])
if (!(--indegrees[nei])) q.emplace(nei);
}
return 0;
}