题目:
![](https://i-blog.csdnimg.cn/blog_migrate/d92f0c756209bb0d8bc9ccd2826edfc6.png)
代码(首刷看解析 2024年3月7日):
class Solution {
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
// um1课程-后置课程组 um2课程-入度
unordered_map<int, vector<int>> um1;
vector<int> um2(numCourses, 0);
// 遍历 初始化 um1 um2
for (int i = 0; i < prerequisites.size(); ++i) {
um2[prerequisites[i][0]]++;
um1[prerequisites[i][1]].push_back(prerequisites[i][0]);
}
//入度 = 0 进队列
queue<int> q;
for (int i = 0; i < numCourses; ++i) {
if (um2[i] == 0) q.push(i);
}
// 遍历 q 出队a, um1[a]的入度-- 入度=0进队
int count = 0;
while (!q.empty()) {
auto val = q.front();
q.pop();
count++;
vector<int> temp = um1[val];
if (temp.size()){
for (auto it : um1[val]){
um2[it]--;
if (um2[it] == 0)
q.push(it);
}
}
}
return count == numCourses;
}
};