LeetCode 207. Course Schedule [Medium]

本文介绍了一种通过检测课程依赖图中的环来判断学生是否能够完成所有必修课程的方法。利用图的入度概念,结合队列进行节点的遍历,确保没有形成闭环依赖,从而确保所有课程都可以按计划修读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题地址

题目内容

这里写图片描述

题目分析

题目的意思为,在上某一门课前,可能会需要有前导课程,假设某学生需要上N门课,给出课程的前导课程,问是否能修完。大概就是判断一个图里面有没有环,有环的话就无法修完。首先遍历整个图,将每个节点的入度记录下来,维护一个队列,记录当前入度为0的节点,队列每弹出一个节点就对整个图的入度做一次修改,弹出的节点保存在res队列中,表示该门课程可以修完,最后看res的size是否与N相同。

代码实现

class Solution {
public:
    bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) {
        int indegree[numCourses] = {0};
        for(auto edge:prerequisites){
            indegree[edge.first]++;
        }
        queue<int> temp;
        queue<int> res;
        for(int i = 0; i < numCourses; i++){
            if(indegree[i] == 0){
                temp.push(i);
            }
        }
        while(temp.size()){
            int num = temp.front();
            temp.pop();
            res.push(num);
            for(auto edge:prerequisites){
                if(edge.second == num){
                    indegree[edge.first]--;
                    if(indegree[edge.first] == 0){
                        temp.push(edge.first);
                    }
                }
            }
        }
        return res.size() == numCourses;

    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值