【力扣】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;
    }
};
相关推荐
计算机安禾14 分钟前
【算法分析与设计】第36篇:计算几何基础:凸包问题的分治与扫描线解法
大数据·人工智能·算法·机器学习·剪枝
货拉拉技术19 分钟前
飞速发展的计算机视觉
人工智能·算法
如竟没有火炬31 分钟前
寻找峰值——二分
java·开发语言·数据结构·python·算法·散列表
noipp44 分钟前
推荐题目:洛谷 P1115 最大子段和
算法
Lumbrologist44 分钟前
【C++】零基础入门 · 第 17 节:多线程编程基础
java·c++·算法
轻闲一号机1 小时前
【语音】笔记
前端·笔记·算法
aWty_1 小时前
实分析入门(12)--可测函数
学习·数学·算法·实变函数
海砥装备HardAus2 小时前
无人机姿态解算中「重力矢量观测退化」机理与动态补偿技术
算法·无人机·飞控
广州灵眸科技有限公司2 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) 开发套件组装上电
网络·数据库·人工智能·算法·飞书
SuperHeroWu72 小时前
【算法】强化学习中奖励和损失函数的关系
算法·环境·强化学习·损失函数·奖励