首页 > 其他 > 详细

leetcode 课程表 中等

时间:2021-08-17 10:42:55      阅读:15      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

 

拓扑。

存 prerequisties[1] 到 prerequisties[0] 的边,然后记录入度。

用队列来进行拓扑,边对应终点入度- 1,入度为 0 时,加入队列。

最后判断每个点是否入度为 0 即可。

class Solution {
public:
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        vector<vector<int>> edge(numCourses);   // edge[i] 存 边
        vector<int> in(numCourses, 0);     // 入度
        for(int i = 0; i < prerequisites.size(); ++ i) {
            edge[prerequisites[i][1]].emplace_back(prerequisites[i][0]);
            ++ in[prerequisites[i][0]];
        }
        queue<int> que;     //
        for(int i = 0; i < numCourses; ++ i) {
            if(in[i] == 0) {
                que.push(i);
            }
        }
        while(!que.empty()) {
            int f = que.front(); que.pop();
            for(int i = 0; i < edge[f].size(); ++ i) {
                -- in[edge[f][i]];
                if(in[edge[f][i]] == 0) {
                    que.push(edge[f][i]);
                }
            }
        }
        for(int i = 0; i < numCourses; ++ i) {
            if(in[i] != 0) return false;
        }
        return true;
    }
};

 

leetcode 课程表 中等

原文:https://www.cnblogs.com/rookie-acmer/p/15150343.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!