知识点
拓扑排序
结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b93b80196f10fb69325ec4d1c6a2e7f5.png)
代码
class Solution {
public:
vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
vector<vector<int>> adj(numCourses);
vector<int> inDegree(numCourses,0);
int len = prerequisites.size();
int before,after;
for(int i=0;i<len;i++){
before = prerequisites[i][1];
after = prerequisites[i][0];
adj[before].push_back(after);
inDegree[after]++;
}
vector<int> seq;
seq = topoSort(adj,inDegree,numCourses);
return seq;
}
vector<int> topoSort(vector<vector<int>>& adj,vector<int>& inDegree,int numCourses){
int cnt = 0;
vector<int> seq;
queue<int> q;
for(int i=0;i<inDegree.size();i++){
if(inDegree[i] == 0){
q.push(i);
}
}
while(!q.empty()){
int before = q.front();
seq.push_back(before);
q.pop();
cnt++;
for(int i=0;i<adj[before].size();i++){
int after = adj[before][i];
inDegree[after]--;
if(inDegree[after] == 0){
q.push(after);
}
}
}
if(cnt == numCourses){
return seq;
}else{
seq.clear();
return seq;
}
}
};
反思
- leetcode居然没有时间和空间限制?(lll¬ω¬)看来每次还有截屏结果了!