当前位置: 首页 > news >正文

《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(42)九龙神火罩拓扑 - 课程表排序(拓扑排序)

《灵珠觉醒:从零到算法金仙的C++修炼》卷三·天劫试炼(42)九龙神火罩拓扑 - 课程表排序(拓扑排序)

哪吒在数据修仙界中继续他的修炼之旅。这一次,他来到了一片神秘的九龙神火罩大阵,阵中有一座巨大的九龙神火罩,罩身闪烁着神秘的光芒。大阵入口处有一块巨大的石碑,上面刻着一行文字:“欲破此阵,需以九龙神火罩之力,拓扑排序,课程表显真身。”

哪吒定睛一看,石碑上还有一行小字:“课程表[[1, 0], [2, 0], [3, 1], [3, 2]]的拓扑排序结果为[0, 1, 2, 3]。”哪吒心中一动,他知道这是一道关于拓扑排序的难题,需要通过拓扑排序的方法,解决课程表的依赖问题。

暴力解法:九龙神火罩的初次尝试

哪吒心想:“要解决课程表排序,我可以尝试所有可能的课程顺序。”他催动九龙神火罩之力,通过递归的方式,枚举所有可能的课程排列,检查是否满足依赖关系。

vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
   
    vector<vector<int>> adj(numCourses);
    for (auto& pre : prerequisites) {
   
        adj[pre[1]].push_back(pre[0]);
    }
    vector<int> result;
    vector<bool> visited(numCourses, false);
    for (int i = 0; i < numCourses; ++i) {
   
        if (!visited[i]) {
   
            if (!dfs(adj, visited, result, i)) {
   
                return {
   };
            }
        }
    }
    reverse(result.begin(), result.end());
    return result;
}

bool dfs(vector<vector<int>>& adj, vector<bool>& visited, vector<int>& result, int node) {
   
    if (visited[node]) return false;
    visited[node] = true;
    for (int neighbor : adj[node]) {
   
        if (!dfs(adj, visited, result, neighbor)) {
   
            return false;
        }
    }
    result.push_back(node);
    return true;
}

哪吒成功地找到了课程表的拓扑排序,但九龙神火罩的光芒却黯淡了下来。他意识到,这种方法虽然可行,但效率低下,尤其是当课程数量很多时,灵力消耗巨大。

C++语法点

在C++中,拓扑排序涉及到图的表示和深度优先搜索。以下是一些重要特性:

  • 图的表示

    • 使用邻接表表示图,每个节点的邻接节点存储在一个列表中。
    • 常用操作:
      • vector<vector<int>> adj(numCourses):创建邻接表。
      • adj[u].push_back(v):添加有向边u -> v

相关文章:

  • MIFNet (论文阅读笔记)
  • 4.0 相机引导XY轴控制螺丝枪打螺丝
  • 信创环境下TOP5甘特图工具对比:从功能到适配性测评
  • Arduino示例代码讲解:ArduinoISP
  • matlab 控制系统GUI设计-PID控制超前滞后控制
  • 【数学基础】概率与统计#1概率论与信息论初步
  • [本周五题]Javascript面试常考题手撕场景UR缓存、new关键字、大数相加、最长递增子序列、高并发请求、大文件上传和WebWorks
  • windows安装两个或多个JDK,并实现自由切换
  • JConsole 监控线程池状态
  • 基恩士PLC编程小技巧十:快速查找空软元件
  • 生态质量研究概述
  • Linux命令基础,创建,输入,输出,查看,查询
  • Cadence学习笔记4
  • (C语言)指针数组的运用
  • 【打卡D6】二分法
  • 【PyQt5】【Visual Studio】环境配置
  • 【MySQL数据库】约束
  • Audacity 技术浅析(一)
  • C# Exe + Web 自动化 (BitComet 绿灯 自动化配置、设置)
  • 什么是强哈希算法pbkdf2(Password-Based Key Derivation Function)
  • 财政部:鼓励政策性银行对符合条件的城市更新项目提供支持
  • 光速晋级!2025年多哈世乒赛孙颖莎4比0战胜对手
  • 菲律宾中期选举结果揭晓,马科斯与杜特尔特家族重回“权力的游戏”
  • 长三角体育节回归“上海时间”,首次发布赛事旅游推荐线路
  • 国家统计局公布2024年城镇单位就业人员年平均工资情况
  • 日本一季度实际GDP环比下降0.2%