您的位置:首页 > 其它

Leetcode Course Schedule II

2017-01-06 10:30 344 查看
题意:给定一些课程的先后顺序,输出一个可行的修课顺序,如果没有则输出空集。

思路:简单拓扑排序,不断寻找入度为0的点。

class Solution {
public:
vector<int> findOrder(int numCourses, vector<pair<int, int>>& prerequisites) {
vector<int> indegree(numCourses, 0);
vector<vector<int> >dm;
for(int i = 0; i < numCourses; ++ i) {
vector<int> temp;
dm.push_back(temp);
}

for(int i = 0; i < prerequisites.size(); ++ i) {
vector<int> temp = dm[prerequisites[i].second];
temp.push_back(prerequisites[i].first);
dm[prerequisites[i].second] = temp;
indegree[prerequisites[i].first] ++;
}
vector<int> re;
for(int i = 0; i < numCourses; ++ i) {
int node = -1;
for(int j = 0; j < indegree.size(); ++ j) {
if(indegree[j] == 0) {
indegree[j] = -1;
node = j;
break;
}
}
if(node == -1) {
vector<int> temp;
return temp;
}
for(int j = 0; j < dm[node].size(); ++ j) {
indegree[dm[node][j]] --;
}

re.push_back(node);
}

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