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

算法优选系列(9.BFS 解决拓扑排序)

目录

拓扑排序简介:

​编辑

课程表(medium):

课程表II(medium):

火星词典(hard):


拓扑排序简介:

  • 有向无环图(DAG图)

如上图每条边都有方向即为有向,任意几个点与边都不能形成一个环即为无环。

入度:即一个顶点有几个边指向它

出度:即一个顶点有几个边指向其他顶点

  • AOV网:顶点活动图

在有向无环图中,用顶点表示一个活动,用边来表示向后顺序的图结构 

  • 拓扑排序

(在这里理解为找到做事情的先后顺序,拓扑排序的结果可能不唯一)

如何排序?

1. 找出图中入度为0的点然后输出

2. 删除与该点链接的点

3. 重复1 2操作直到图中没有点 或者 没有入度为0的点(有可能有环,因此另一个拓扑排序应用就是判断图中是否有环)

... ...

  • 实现拓扑排序  

借助队列,来一次BFS

1. 初始化:把所有入度为0的点加入队列

2. 当队列不为空的时候:

        a. 拿出队头元素,加入最终结果

        b. 删除与该元素相邻的边

        c. 判断:与删除边相邻的点,是否入度变成零

                          如果入度为0加入队列

建图:第一题讲

课程表(medium):

题目链接:207. 课程表 - 力扣(LeetCode)


算法:

原问题可以转换成⼀个拓扑排序问题。
用BFS 解决拓扑排序即可。
拓扑排序流程:
  • 将所有入度为 0 的点加入到队列中;
  • 当队列不空的时候,一直循环:
  1. 取出队头元素;
  2. 将于队头元素相连的顶点的入度 - 1;
  3. 然后判断是否减成 0,。如果减成 0,就加⼊到队列中。

eg: 

 

课程表II(medium):

题目链接:210. 课程表 II - 力扣(LeetCode)

算法:

和上题一样~


火星词典(hard):

题目链接:LCR 114. 火星词典 - 力扣(LeetCode)

算法:

将题意搞清楚之后,这道题就变成了判断有向图时候有环,可以⽤拓扑排序解决。
如何搜集信息(如何建图):
  1. 两层 for 循环枚举出所有的两个字符串的组合;
  2. 然后利⽤指针,根据字典序规则找出信息。

http://www.xdnf.cn/news/572311.html

相关文章:

  • GStreamer (四)交叉编译
  • 华为eNSP无线AC/AP组网实战
  • 基于大模型的闭合性尺桡骨干骨折全方位诊疗研究报告
  • 现代计算机图形学Games101入门笔记(二十)
  • V少JS基础班之第五弹
  • ElasticSearch导读
  • 【网络安全】日志采集、监控任务守护进程详细教程(附实战案例)
  • 打卡31天
  • Python学习Day1:安装
  • 谷歌2025年I/O开发者大会热点总结
  • shell脚本总结3
  • 【LLMs篇】12:Qwen3 技术报告翻译
  • 人工智能路径:技术演进下的职业发展导航
  • 20个关于Java编程语言的常见问题
  • 从微积分到集合论(1630-1910)(历史简介)——第2章——牛顿(Newton)和莱布尼兹(Neibniz)以及莱布尼兹传统(H.J.M.Bos)
  • 2025年人工智能新应用与新技术全景解析
  • Qt+线段拖曳示例代码
  • 【UE5】环形菜单教程
  • 现代计算机图形学Games101入门笔记(十九)
  • 汽车电子电气架构诊断功能开发全流程解析
  • Linux nbd 网络块设备(2)-内核实现
  • fork 和 写时拷贝
  • NV009NV010美光闪存颗粒NV011NV012
  • 【Elasticsearch】字段别名
  • el-radio-group 与 el-dropdown 一起使用时的注意事项
  • Pytorch基础操作
  • cookie跨域共享踩的坑
  • sqli-labs第十八关——POST-UA注入
  • 使用MATLAB输出1000以内所有完美数
  • MoManipVLA-北京邮电-2025.3.17-移动操控-未完全开源