原理与点击打开链接一样,拓扑排序法遍历即可,用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;
}
};
本文介绍了一种基于拓扑排序的课程排序算法实现方法,通过使用C++编程语言演示了如何遍历并找出所有课程的正确学习顺序。该算法首先利用邻接表存储每门课程的先修课程,接着计算每个节点的入度,并不断迭代直至所有课程都被正确排序。
1096

被折叠的 条评论
为什么被折叠?



