题目描述
思路分析
拓扑排序,记录方案
代码实现
class Solution {
public:
vector<int> findOrder(int n, vector<vector<int>>& pre) {
vector<int> ans;
vector<int> d(n);
queue<int> q;
vector<vector<int>> g(n);
for(int i=0;i<pre.size();i++){
int b=pre[i][0],a=pre[i][1];
g[a].push_back(b);
d[b]++;
}
for(int i=0;i<n;i++) if(!d[i]) q.push(i);
while(q.size()){
auto t=q.front();
ans.push_back(t);
q.pop();
for(auto i:g[t]){
--d[i];
if(!d[i]) q.push(i);
}
}
if(ans.size()<n) ans={};
return ans;
}
};