2025年- H59-Lc167--207.课程表(拓扑排序、BFS)-需二刷--Java版

article/2025/7/23 1:38:26

1.题目描述

在这里插入图片描述

2.思路

记录每门课程的前置课程数量,记录每门课程是哪些课程的前置课程。
(1)如果有向图中的拓扑图中存在环,则说明所有的课程是无法完成的。
(2)使用拓扑排序,在图中每个节点的入度和出度。
(3)统计完每个节点的入度,使用广度优先搜索。因为入度为0,说明没有先修课程,也就是先修课程已经完成了。如果c1已经修完,C3和C8以C1为先修课程,所以入度就可以-1.
将入度为0的课程加入到待学习的课程中。
最后要判断优秀,已学习的课程的数量是否等于输入课程的数量。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

补充:
在这里插入图片描述
在这里插入图片描述
补充2:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.代码实现

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;public class H207 {List<List<Integer>> edges;//邻接表,edges[i] 存储从节点 i 指向的所有节点// 入度数组,indeg[i] 表示课程 i 被依赖的次数int[] indeg;public boolean canFinish(int numCourses, int[][] prerequisites) {edges=new ArrayList<List<Integer>>();//声明edges的变量
//        创建一个 ArrayList,每个元素是一个 List<Integer>。
//
//        它表示图中每个节点的邻接列表(即当前节点能指向哪些其他节点)。
//
//        初始状态:edges = []for(int i=0;i<numCourses;i++){edges.add(new ArrayList<Integer>());//        edges = [
//    [],  // 课程 0 的邻接列表
//    [],  // 课程 1 的邻接列表
//    []   // 课程 2 的邻接列表
//]}//初始化入度数组,初始化所有课程的入度为0indeg=new int[numCourses];//构建图的邻接表和计算入度数组for(int[] info:prerequisites){edges.get(info[1]).add(info[0]);//课程info[1]->课程info[0]++indeg[info[0]];//课程info[0]的入度+1}//创建一个队列,用于存放所有入度为0的课程(及时没有依赖的课程)Queue<Integer> que=new LinkedList<Integer>();for(int i=0;i<numCourses;++i){if(indeg[i]==0){que.offer(i);//将所有入度为0的课程加入队列}}//记录已访问(已学习)的课程数量int visited=0;//bfs拓扑排序while(!que.isEmpty()){++visited;//每学习一门课程,已访问的课程数量+1int u=que.poll();//从队列中取出一门可以学习的课程 ufor(int v:edges.get(u)){--indeg[v];//学完课程u后,v的入度-1if(indeg[v]==0){//如果v的入度变为0,说明没有其他前置课程可以学习que.offer(v);//将课程v加入到队列}}}//判断是否所有课程都能学完//如果已访问的课程数量等于总课程数量,说明没有环,能完成所有课程return visited==numCourses;}
}

http://www.hkcw.cn/article/msOAomOlte.shtml

相关文章

MQTT的Thingsboards的使用

访问云服务 https://thingsboard.cloud/ 新建一个设备 弹出 默认是mosquittor的客户端。 curl -v -X POST http://thingsboard.cloud/api/v1/tnPrO76AxF3TAyOblf9x/telemetry --header Content-Type:application/json --data "{temperature:25}" 换成MQTTX的客户…

代码随想录算法训练营第60期第五十二天打卡

大家好&#xff0c;昨天我们重点讲解了单调栈的问题&#xff0c;我们今天的题目还是继续围绕单调栈展开&#xff0c;我们上节课其实对单调栈已经有了大致的了解&#xff0c;今天的第一道题目大家务必要注意很重要&#xff0c;接雨水问题我们会涉及到单调栈与双指针&#xff0c;…

新能源集群划分+电压调节!基于分布式能源集群划分的电压调节策略!

适用平台&#xff1a;MatlabYalmip Cplex (具体操作已在程序文件中说明) 参考文献&#xff1a;基于分布式能源集群化分的电压调节策略[D]. 一、文献解读 1. 主要内容/创新点 提出了一种基于分布式能源集群化的电压调节策略&#xff0c;计及分布式能源的有功、无功调节能力&a…

【C++】22. 红黑树封装实现Mymap和Myset

上一章节我们实现了红黑树&#xff0c;这一章节我们就用红黑树封装来实现一个我们自己的map和set 1. 源码及框架分析 SGI-STL 3.0版本的源代码中&#xff0c;map和set的实现主要分布在若干头文件中&#xff0c;这些头文件构成了这两个容器的完整实现架构&#xff1a; 核心头文…

论文速读《UAV-Flow Colosseo: 自然语言控制无人机系统》

论文链接&#xff1a;https://arxiv.org/abs/2505.15725项目主页&#xff1a;https://prince687028.github.io/UAV-Flow/ 0. 简介 近年来&#xff0c;无人机技术蓬勃发展&#xff0c;但如何让无人机像智能助手一样理解并执行人类语言指令&#xff0c;仍是一个前沿挑战。现有研…

关于表连接

目录 1.左连接 2.右连接 3.内连接 4.全外连接 5.笛卡尔积 -- 创建表A CREATE TABLE A(PNO VARCHAR2(10) PRIMARY KEY, PAMT NUMBER, A_DATE DATE);-- 向表A插入数据 INSERT INTO A VALUES (01001, 100, TO_DATE(2005-01-01, YYYY-MM-DD)); INSERT INTO A VALUES (010…

【面试 - 遇到的问题 - 优化 - 地图】腾讯地图轨迹回放 - 回放的轨迹时间要和现实时间对应(非匀速)

目录 背景轨迹回放 - 匀速效果图TrackPlaybackDialog.vue 代码TMapNew.vue 代码 轨迹回放 - 非匀速效果图TrackPlaybackDialog.vue 代码TMapNew.vue 代码 背景 腾讯地图轨迹回放是匀速回放的&#xff0c;但是客户要求根据现实时间&#xff0c;什么时间点在某个点位 【腾讯地图轨…

Python Day37 学习

&#xff08;补充学习几个知识点&#xff09; 1. 异常处理机制 摘自讲义 常见异常报错 2. debug 理解一下几种错误 SyntaxError 语法错误 代码不符合Python的语法规则 错误代码示例 NameError 名称错误 尝试使用一个未被定义的变量、函数或对象的名称。 TypeError 类型错…

打破建筑管理壁垒,IBMS智能系统赋能现代建筑协同增效

在建筑行业快速发展与智能化转型的进程中&#xff0c;传统建筑管理模式正面临前所未有的挑战。各子系统独立运行形成的“信息孤岛”、部门间沟通不畅导致的协作低效&#xff0c;以及管理决策缺乏数据支撑等问题&#xff0c;严重制约了建筑的运营效率与服务质量。而IBMS&#xf…

十四: 导数,数值微分,偏导数,梯度

在前一章说明损失函数的用途时,引入了梯度,导数等名词,现在我们详细了解一下这些名词 1. 导数 假如你是全程马拉松选手&#xff0c;在开始的 10 分钟内跑了 2 千米。如果要计算此时的奔跑速度&#xff0c;则为 2/10 0.2&#xff3b;千米 / 分&#xff3d;。也就是说&#xf…

深度刨析树结构(从入门到入土讲解AVL树及红黑树的奥秘)

树的概念及结构: 树是一种非线性的数据结构&#xff0c;它是由n>0个有限结点组成的一个有层次关系的集合&#xff0c;把它叫做树是因为像一个倒挂的树&#xff0c;根在上&#xff0c;叶子在下 对于树&#xff0c;每颗树都可以看成根节点和子树&#xff0c;所有的子树又可以…

Replacing iptables with eBPF in Kubernetes with Cilium

source: https://archive.fosdem.org/2020/schedule/event/replacing_iptables_with_ebpf/attachments/slides/3622/export/events/attachments/replacing_iptables_with_ebpf/slides/3622/Cilium_FOSDEM_2020.pdf 使用Cilium&#xff0c;结合eBPF、Envoy、Istio和Hubble等技术…

基于NXP例程学习CAN UDS刷写流程

文章目录 前言1.概述1.1 诊断报文 2.协议数据单元(N_PDU)2.1 寻址信息&#xff08;N_AI&#xff09;2.1.1 物理寻址2.1.2 功能寻址2.1.3 常规寻址&#xff08;Normal addressing&#xff09;2.1.4 常规固定寻址&#xff08;Normal fixed addressing&#xff09;2.1.5 扩展寻址&…

c++ 模板

测试代码。my_template.h头文件内容如下&#xff1a; #ifndef MY_TEMPLATE_HEADER_H #define MY_TEMPLATE_HEADER_H// 函数模板示例 函数模板的 T 作用域仅限于此函数 template<typename T> T my_max(T a, T b) {return (a > b) ? a : b; }// 类模板示例 类模板的 T…

HTML网页-练习float

划分 12个格子&#xff0c;第一栏为&#xff1a;人物简介&#xff1b;其他栏为人物名称&#xff1b; 使用float: left将格子左浮动。 设置格子背景颜色&#xff0c;字体颜色&#xff0c;鼠标放上去后的字体颜色和背景颜色。 <style>.title {width: 100%;overflow: hidd…

Express教程【003】:Express获取查询参数

文章目录 3、获取URL中携带的查询参数3.1 参数形式&#xff1a;查询字符串3.2 参数形式&#xff1a;动态参数3.3 参数形式&#xff1a;Json数据 3、获取URL中携带的查询参数 3.1 参数形式&#xff1a;查询字符串 1️⃣通过req.query对象&#xff0c;可以访问到客户端通过查询…

搭建最新版开源监控平台SigNoz踩的坑

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权并注明出处。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 一、前言 SigNoz 是一款开源应用程序性能监控工具&#xff0c;在往期相关文章&#xff08;文末有链接&#xff09;中…

ArcGIS应用指南:基于网格与OD成本矩阵的交通可达性分析

随着城市化进程的加速,交通系统的效率和公平性日益成为影响居民生活质量的关键因素之一。在这一背景下,如何科学评估城市区域内的交通可达性,成为了城市规划、交通管理和公共政策制定中的重要议题。作为中国东南沿海的重要港口城市,厦门以其独特的地理优势和快速的城市发展…

数据基座觉醒!大数据+AI如何重构企业智能决策金字塔(下)

1. 数据架构的量子跃迁 1.1 从线性堆叠到立体网络 传统六层架构正在经历基因重组。某智能家居企业将数据流转路径重构为三维拓扑网络后&#xff0c;新品研发周期从18个月压缩至9个月。这个改造的核心在于打破数据层间的物理隔离&#xff0c;让原始数据流能直接触达决策中枢。…

HTML5实现简洁的端午节节日网站源码

HTML5实现简洁的端午节节日网站源码 前言一、设计来源1.1 网站首页界面1.2 端午由来界面1.3 节日活动界面1.4 传统美食界面1.5 民俗文化界面1.6 登录界面1.7 注册界面 二、效果和源码2.1 动态效果2.2 源代码 结束语 HTML5实现简洁的端午节节日网站源码&#xff0c;酷炫的大气简…