图基本算法 拓扑排序(基于邻接表的dfs实现)

拓扑排序是对有向无回路图的排序,确保边的方向从左到右。本文介绍了使用DFS实现拓扑排序的方法,详细阐述了算法步骤,并证明了其正确性。最后提供了基于DFS的拓扑排序代码示例。
摘要由CSDN通过智能技术生成

拓扑排序,是对有向无回路图(顶点活动网络AOV网)进行排序,以期找到一个线性序列,这个线性序列在生活正可以表示某些事情完成的相应顺序。如果说所求的图有回路的话,则不可能找到这个序列。

  在大学数据结构课上,我们知道求拓扑排序的一种方法。首先用一个入度数组保存每个顶点的入度。在进行拓扑排序时,我们需要找到入度为0的点,将其存入线性序列中,再将其从图中删除(与它相关的边都删除,相邻的顶点的入度均减1),再重复上面的操作,直至所有的顶点都被找到为止。如果不对每次找入度为0的顶点的方法进行处理,而直接去遍历入度数组,则该算法的时间复杂度为O(|V|2),如果使用一个队列来保存入度为0的顶点,则可以将这个算法的复杂度降为O(V+E)。

  今天在算法导论上看了用dfs来求拓扑排序的算法,才发现其高深之处,膜拜之Orz…

       下面是算法导论的叙述:

  本节说明了如何运用深度优先搜索,对一个有向无回路图(dag)进行拓扑排序。对有向无回路图G=(V,E)进行拓扑排序后,结果为该图顶点的一个线性序列,满足如果G包含边(u, v),则在该序列中,u就出现在v的前面(如果图是有回路的,就不可能存在这样的线性序列)。一个图的拓扑排序可以看成是图中所有顶点沿水平线排列而成的一个序列。使得所有的有向边均从左指向右。因此,拓扑排序不同于通常意义上的排序。

在很多应用中,有向无回路图用于说明时间发生的先后次序(例如大学选课的先修课程),下图1即给出一个实例,说明Bumstead教授早晨穿衣的过程。他必须先穿好某些衣服,才能再穿其他衣服(如先穿袜子后穿鞋),其他一些衣服则可以按任意次序穿戴(如袜子和裤子)ÿ

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值