和Course Schedule类似,记录下结果即可。代码如下:
vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {
vector<int> result;
vector<int> into(numCourses, 0);
for(int i = 0; i < prerequisites.size(); ++i)
into[prerequisites[i].first]++;
for(int i = 0; i < numCourses; ++i){
int j = 0;
while(j < numCourses){
if(into[j] == 0)
break;
++j;
}
if(j == numCourses){
result.clear();
return result;
}
into[j] = -1;
result.push_back(j);
for(int p = 0; p < prerequisites.size(); ++p)
if(prerequisites[p].second == j)
into[prerequisites[p].first]--;
}
return result;
}