您的位置:首页 > 其它

Course Schedule II

2015-10-05 15:02 447 查看
原理与点击打开链接一样,拓扑排序法遍历即可,用vector保存每一个入度为0的结点。

class Solution {
public:
vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {
vector<unordered_set<int>> set;
vector<int> vec;
for(int i=0;i<numCourses;i++){
unordered_set<int> set_tmp;
set.push_back(set_tmp);
}
int size = prerequisites.size();
for(int i=0;i<size;i++){
set[prerequisites[i].second].insert(prerequisites[i].first);
}
int preNums[numCourses]={0};
for(int i=0;i<numCourses;i++){
for(auto j=set[i].begin();j!=set[i].end();j++){
preNums[*j]++;
}
}
for(int i=0;i<numCourses;i++){
int j=0;
for(;j<numCourses;j++){
if(preNums[j]==0)break;
}
if(j==numCourses){
vector<int> tmp;
return tmp;
}
vec.push_back(j);
preNums[j]=-1;
for(auto k=set[j].begin();k!=set[j].end();k++){
preNums[*k]--;
}
}
return vec;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: