题目链接:https://leetcode.cn/problems/course-schedule/
题目如下:
class Solution {
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
//拓扑排序只需要记录所有点的入度,以及每条边即可,每次判断入度是否为0
vector<int> in;//存储所有节点的入度
in.resize(numCourses,0);
vector<int> g[numCourses];//存储所有边的邻接表
int cnt=0;//记录能够拓扑排序的数量
for(auto e:prerequisites){
in[e[1]]++;//记录入度!!!
g[e[0]].push_back(e[1]);
}
queue<int> que;
for(int i=0;i<numCourses;i++){
if(in[i]==0) que.push(i);
}
if(que.size()==0) return false;//若找不到入度为0的点,则说明存在环
while(que.size()){
auto t=que.front();
que.pop();
cnt++;
for(auto e:g[t]){
in[e]--;
if(in[e]==0) que.push(e);
}
}
if(cnt==numCourses) return true;
else return false;
}
};