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

6.4.6拓扑排序

 用DAG(有向无环图)表示一个工程。顶点表示活动,有向边<Vi,Vj>表示活动Vi活动必须先与Vj活动进行。

 所谓的拓扑排序:找到做事的先后顺序

 

 

 

 

 

 

以上根据拓扑排序的实现:

加入对有回路的图进行拓扑排序:

 所以原图如果存在回路,就不存在拓扑排序。

 采用邻接表进行存储

定义了一个indegree[]数组

定义一个print数组(刚开始全部初始化为-1)

一个空栈S

 

 检查indegree数组当前入度为0的顶点

 

将与2号结点相连的结点的入度减去1.

 

 接下来我们处理入度为0的还有0号结点。

在while循环里面处理和0号结点相连的几个节点。

接着是1号结点的入度因为减去1之后变成了0。

 此时将1号结点也压入栈中

 接着把3号结点和4号结点也压入栈中。

 

下面我们来认识一下逆拓扑排序:

出栈的时候出出度为0

 

 随便删除切番茄和打鸡蛋

 

 

 我么在删除出度为0的顶点时,还需要删除对应的边,就需要将邻接表全部遍历一遍去寻找其前驱。

 所以最好使用邻接矩阵去存储(这样就可以直接去第5列的值)

发现它的前驱是2和3.

也可以采用逆邻接表去存储

我们也可以用DFS算法实现拓扑排序

 

 

 

 

 接下来我们会把4打印输出:

 对于3号节点来说,也找不到一个与之相邻且未被访问过的结点。

 

 

 

 我们的函数会重新回到上面这个for循环,寻找visited数组为False的顶点。

 随意我们发现使用DFS算法,顶点在推出递归栈之前会输出成逆拓扑排序失败

 

http://www.lryc.cn/news/89490.html

相关文章:

  • Ae:常用内置抠像效果
  • [ 支付宝支付笔记]
  • 2023九坤投资暑期实习笔试复盘
  • 深度学习的定义和未来发展趋势
  • 如何更改 Linux 文件和目录权限?
  • Revit楼板问题:楼板连接处以及楼板开洞,一键开洞
  • 【AI领域+餐饮】| 论ChatGPT在餐饮行业的应用展望
  • 【计算机视觉 | 目标检测】arxiv 计算机视觉关于目标检测的学术速递(5月29日论文合集)
  • Altium Designer 相同电路多组复制布线
  • C++线程池介绍和C++代码实现
  • 【day 06】vue的组件
  • 第3章 Class and Object
  • 卫星定位北斗芯片AT6558一款高性能BDS/GNSS多模卫星导航接收机SOC单芯片
  • 提升您的 MQTT 云服务:深入探索 BYOC
  • Zookeeper面试题总结
  • 如何使用HTML、CSS和JavaScript来制作这两种类型的时钟
  • Java中操作Xml使用备忘
  • 【Java|基础篇】内部类
  • 七牛云图床设置
  • Android 12.0下拉状态栏录屏去掉弹窗直接录屏
  • MySql基础学习(1)
  • 18- 弹幕系统设计
  • 字节软测划水四年,内容过于真实......
  • Mybatis介绍
  • Docker理论基础
  • MySQL数据库之存储引擎
  • 中介效应分析全流程汇总
  • 论文阅读:Multimodal Graph Transformer for Multimodal Question Answering
  • 关于compile() 函数简单实用示例
  • Deep Frequency Filtering for Domain Generalization论文阅读笔记