leetcode 207. 课程表

122 阅读1分钟

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;
};