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

算法优选系列(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.lryc.cn/news/2383311.html

相关文章:

  • (1)Java 17/18/19 新特性面试题
  • LAN(局域网)和WAN(广域网)
  • 【Java高阶面经:微服务篇】7. 1秒响应保障:超时控制如何成为高并发系统的“救火队长”?
  • 力扣周赛置换环的应用,最少交换次数
  • 大语言模型 12 - 从0开始训练GPT 0.25B参数量 MiniMind2 补充 训练开销 训练步骤 知识蒸馏 LoRA等
  • hgdbv9创建plpython3u插件后无法使用该插件创建函数
  • SQLMesh 宏操作符详解:@IF 的条件逻辑与高级应用
  • nt!MiRemovePageByColor函数分析之脱链和刷新颜色表
  • 【爬虫】12306自动化购票
  • 不同消息队列保证高可用实现方案
  • 【Django系统】Python+Django携程酒店评论情感分析系统
  • spring cloud alibaba-Geteway详解
  • c#中添加visionpro控件(联合编程)
  • 性能测试-mysql监控
  • 游戏引擎学习第301天:使用精灵边界进行排序
  • CSS attr() 函数详解
  • 【AI生成PPT】使用ChatGPT+Overleaf自动生成学术论文PPT演示文稿
  • 流复备机断档处理
  • Linux 安装 pytorch+cuda+gpu 大模型开发环境过程记录
  • 局部放大maya的视图HUD文字大小的方法
  • 数学复习笔记 16
  • 初识Linux · NAT 内网穿透 内网打洞 代理
  • STM32接收红外遥控器的遥控信号
  • Redis从入门到实战 - 高级篇(下)
  • NGINX常用功能—笔记
  • JVM 性能问题排查实战10连击
  • 【jvm第8集】jvm调优工具(图形化工具)
  • Python测试单例模式
  • 多技术栈 iOS 项目的性能调试实战:从 Flutter 到 Unity(含 KeyMob 工具实测)
  • STM32简易计算机设计