c++
class Solution {
public:
bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
vector<int> indegree(numCourses, 0);
vector<vector<int>> edge(numCourses);
queue<int> que;
for (auto x : prerequisites) {
indegree[x[0]]++;
edge[x[1]].push_back(x[0]);
}
for (int i = 0; i < numCourses; i++) if (indegree[i] == 0) que.push(i);
int cnt = 0;
while (!que.empty()) {
int course = que.front();
que.pop();
cnt++;
for (auto x : edge[course]) {
indegree[x]--;
if (indegree[x] == 0) que.push(x);
}
}
return cnt == numCourses;
}
};
js
var canFinish = function(numCourses, prerequisites) {
var indegree = new Array(numCourses).fill(0);
var edge = new Array(numCourses).fill(0).map(() => new Array());
var que = [];
for (var x of prerequisites) {
indegree[x[0]]++;
edge[x[1]].push(x[0]);
}
for (var i = 0; i < numCourses; i++) {
if (indegree[i] == 0) que.push(i);
}
var cnt = 0;
while (que.length != 0) {
var ind = que.shift();
cnt++;
for (var x of edge[ind]) {
indegree[x]--;
if (indegree[x] == 0) que.push(x);
}
}
return cnt === numCourses;
};