news 2026/9/5 22:16:33

算法日常・每日刷题--<BFS拓扑排序>4

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法日常・每日刷题--<BFS拓扑排序>4

LCR 113. 课程表 II - 力扣(LeetCde)

题目理解

总共有numCourses门课,编号0 ~ numCourses‑1prerequisites[i] = [a,b]学 a 课,必须先学 b 课

要求返回任意一个合法上课顺序

  • 存在拓扑序列(无环):返回上课顺序数组
  • 图有环(循环依赖,课学不完):返回空数组

和课程表 I 区别:课程表 I 只需要判断 true/false;本题需要把拓扑排序的序列输出出来。

核心思路 BFS 拓扑排序

  1. 建图(邻接表)b → a,b 上完之后才可以上 a;统计每门课的入度(还有几门先修没上完)
  2. 入度为 0 全部入队列:不需要先修、可以直接学的课程
  3. BFS 遍历
    • 取出队头课程,加入结果集合(代表这门课已经上完)
    • 把它所有后继课程入度减一(消除这门课带来的依赖)
    • 如果后继课程入度变成 0,说明它的全部先修课完成,入队列
  4. 最后判断
    • 如果结果数组长度等于总课程数:全部课都上完,直接返回结果
    • 长度不够:说明有环,返回空数组
class Solution { public: vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) { vector<vector<int>> edges(numCourses); // 临接表 vector<int> in(numCourses,0); // 构建图 for (auto e : prerequisites) { int a = e[0]; int b = e[1]; edges[b].push_back(a); in[a]++; } vector<int> ret; queue<int> q; for (int i = 0; i < numCourses; i++) { if (in[i] == 0) { q.push(i); } } while (q.size()) { int a = q.front(); q.pop(); ret.push_back(a); for (auto next : edges[a]) { // 将有关边的入度-- in[next]--; if (in[next] == 0) { q.push(next); } } } if (ret.size() == numCourses) return ret; else return {}; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 22:46:03

小天才电话手表通用刷机工具:从原理到救砖实战指南

简介&#xff1a;这是一套专为小天才电话手表Z2至Z6&#xff08;不含巅峰版、Z6A&#xff09;机型设计的降级与ROOT刷机工具集&#xff0c;面向具备嵌入式基础和动手能力的极客用户&#xff0c;解决高版本系统封闭导致的功能受限、权限不足等问题。资源包共4个文件&#xff0c;…

作者头像 李华
网站建设 2026/9/3 18:33:03

PyTorch实现DCGAN:从零训练生成二次元头像

简介&#xff1a;本资源是一个基于PyTorch实现的DCGAN二次元头像生成项目&#xff0c;面向深度学习初学者与PyTorch实践者&#xff0c;旨在通过完整可运行的生成对抗网络案例&#xff0c;帮助用户掌握卷积生成模型的核心原理、训练流程与工程部署。压缩包共3478个文件&#xff…

作者头像 李华
网站建设 2026/9/5 6:47:59

双极步进电机控制实战:Stepper 29 Click与DRV8825微步进驱动解析

做步进电机控制这些年&#xff0c;我最大的感触是&#xff1a;真正难的不是让电机转起来&#xff0c;而是让它在低速时不抖、不叫、不失步。MIKROE 的Stepper 29 Click是一块基于 TI DRV8825 的双极步进电机驱动扩展板&#xff0c;它把双极步进电机控制和可配置的高级微步进这两…

作者头像 李华
网站建设 2026/9/3 22:18:05

从零打造STM32健康运动手环:硬件选型、算法与低功耗实战

简介&#xff1a;本资源是一套基于STM32F103C8T6的健康与运动监测手环完整设计工程&#xff0c;面向嵌入式初学者、课程设计学生及毕业设计开发者&#xff0c;解决心率、血氧、血压、体温多参数实时采集与阈值预警的典型物联网终端开发问题。压缩包含278个文件&#xff0c;涵盖…

作者头像 李华
网站建设 2026/9/5 23:11:40

校园外卖多个校门中转点怎么划分?按商家来向、楼栋范围和交接能力验收

校园外卖是否要设置多个校门中转点&#xff0c;不应按“订单多不多”单独决定。先把校外商家来向、允许进入的校门、各宿舍区的接力范围和每个点的值守能力画成一张范围表&#xff1b;当一个中转点不能让接力人员在既定时段内覆盖其负责楼栋时&#xff0c;再评估分点。上线验收…

作者头像 李华
网站建设 2026/9/6 0:55:49

数据分析的复盘记录

数据分析的复盘记录先确定问题 数据分析的复盘记录的讨论先落在数据口径、样本范围和确认人。不要用一段笼统的经验替代前提&#xff1a;输入从哪里来、谁负责确认、失败后怎样停止&#xff0c;都应在开始前写清。 沿着一条路径检查 围绕数据分析的复盘记录做数据分析实践时&am…

作者头像 李华