【力扣】207.课程表

AC截图

题目

思路

这道题可以抽象为一个有向无环图,判断是否可以进行拓扑排序

①构建邻接表

vector<vector<int>> edge:下标代表节点编号,数组内容代表该结点的直接后置结点

vector<int> indegree:下标代表结点编号,数组内容代表该结点入度。在入度为0的时候,可以加入拓扑排序序列。

②将所有入度为0的结点加入队列

③进行bfs遍历

代码

cpp 复制代码
class Solution {
public:
    vector<vector<int>> edge;
    vector<int> indegree;
    bool canFinish(int numCourses, vector<vector<int>>& prerequisites) {
        edge.resize(numCourses);
        indegree.resize(numCourses);

        for(auto pre:prerequisites){
            edge[pre[1]].push_back(pre[0]);
            indegree[pre[0]]++;
        }

        queue<int> q;
        for(int i=0;i<numCourses;i++){
            if(indegree[i]==0){
                q.push(i);
            }
        }

        int visit=0;
        while(!q.empty()){
            visit++;
            int u = q.front();
            q.pop();

            for(int v:edge[u]){
                indegree[v]--;
                if(indegree[v]==0){
                    q.push(v);
                }
            }
        }

        return visit==numCourses;
    }
};
相关推荐
代码骑士19 分钟前
决策树(Decision Tree)案例分析
算法·决策树·机器学习
lucky_syq3 小时前
Flink 窗口:流处理的核心利器
大数据·算法·flink
绛洞花主敏明3 小时前
go语言for循环中嵌套defer的执行顺序
开发语言·算法·golang
好易学·数据结构4 小时前
为什么要学习数据结构与算法
数据结构·算法·leetcode·面试·力扣·笔试·牛客网
#看心情4 小时前
算法思想-贪心算法
算法·贪心算法
Buling_04 小时前
算法-回溯篇06-分割回文串
算法·leetcode·职场和发展
梭七y4 小时前
leetcode日记(77)子集Ⅱ
算法·leetcode·职场和发展
Aqua Cheng.4 小时前
字节青训营后端方向的个人总结(2025年3月4日)
java·数据结构·算法
因兹菜4 小时前
[LeetCode]day33 150.逆波兰式求表达值 + 239.滑动窗口最大值
算法·leetcode·职场和发展
c无序5 小时前
【一个月备战蓝桥算法】递归与递推
算法