1、题目描述
输入课程数n,课程先修对,返回一种可能的上课顺序。不存在返回空数组。
2、思路
拓扑排序。
3、代码
vector<int> findOrder(int n, vector<pair<int, int>>& p) {
vector<int> ans;
int m = p.size();
vector<int>d(n,0);
vector<vector<int> > v(n);
set<int>s;
for(int i=0;i<m;i++){
d[p[i].first]++;
v[p[i].second].push_back(p[i].first);
}
for(int i=0;i<n;i++){
if(d[i]==0)
s.insert(i);
}
while(!s.empty()){
int i = *s.begin();
s.erase(s.begin());
ans.push_back(i);
for(int j=0;j<v[i].size();j++){
d[v[i][j]]--;
if(d[v[i][j]]==0)
s.insert(v[i][j]);
}
}
if(ans.size()==n) return ans;
else{
ans.clear();
return ans;
}
}