参考了这篇博客
经典写法:
vector<int> findOrder(int n, vector<int>& in, vector<vector<int>>& edges) {
// in: 节点的入度表
// edges:图的邻接表
queue<int> q;
vector<int> ans;
for(int i = 0 ; i < n ; i++)
if(in[i] == 0) q.push(i);
while(!q.empty())
{
int p = q.front();
q.pop();
ans.push_back(p);
for(int i = 0 ; i < edges[p].size() ; i++)
{
int y = edges[p][i];
--in[y];
if(in[y] == 0) q.push(y);
}
}
if(ans.size() == n) return ans;
else return {};
}