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

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

题目理解

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

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

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

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

核心思路 BFS 拓扑排序

  1. 建图(邻接表) :b → a,b 上完之后才可以上 a;统计每门课的入度(还有几门先修没上完)
  2. 入度为 0 全部入队列:不需要先修、可以直接学的课程
  3. BFS 遍历
    • 取出队头课程,加入结果集合(代表这门课已经上完)
    • 把它所有后继课程入度减一(消除这门课带来的依赖)
    • 如果后继课程入度变成 0,说明它的全部先修课完成,入队列
  4. 最后判断
    • 如果结果数组长度等于总课程数:全部课都上完,直接返回结果
    • 长度不够:说明有环,返回空数组
cpp 复制代码
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 {};
    }
};
相关推荐
专注仿真3 小时前
卷积神经网络(CNN)算法详解
人工智能·python·算法·代码·大模型训练
FII工业富联科技服务3 小时前
多智能体如何进入制造现场?从业务协同到数字孪生验证
大数据·人工智能·算法·机器人·制造·数字孪生
≮傷£≯√3 小时前
httpserver_QNetWorkClient
算法
Evand J3 小时前
【PMSM例程11】永磁同步电机(PMSM)基于UKF的转速与转子位置估计。附下载链接
算法·matlab·卡尔曼滤波·永磁同步电机·ukf·pmsm·位置估计
货拉拉技术3 小时前
记忆即智能:重构对话式AI Agent认知基座的四层渐进式记忆与自进化系统
人工智能·算法
杜 硕4 小时前
从零开始的C++生活——第六讲——02
c++·算法·生活
小超人诞生日记4 小时前
C++ STL 反向迭代器:从源码框架到适配器实现
c++·算法
青少儿编程课堂4 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会Scratch考级:校园成语接龙大挑战解析
c++·python·算法·bfs·信息学竞赛
老师我太想进步了20265 小时前
【数据结构-1】例解算法复杂度
数据结构·算法
tyler_download5 小时前
deepseek后训练算法:位置编码算法RoPE详解1
算法