拓扑排序

我们可以很轻松判断一个图有没有环,是不是有向的,但是,如何让计算机知道我们的图是否有向或者有环?

比如说,我们软件工程的教学进度。
我们一般要学完高数和程序编程之后再学习数据结构和计算机组成原理,这就是活动和活动之间存在一些关系(优先关系)
用节点表示活动,用弧表示活动间的优先关系的有向图称为AOV-网。
在AOV-网中,不应该出现有向环,因为存在环意味着某项活动应以自己为先决条件。显然这是荒谬的,若设计出这样的流程图,工程便无法进行。而对程序的数据流图中,则表明存在一个死循环。

所谓拓扑排序就是将AOV-网中所有顶点排成一个线性序列,该序列满足:若在AOV-网中由顶点vi到顶点vj有一条路径,则在该线性序列中的顶点vi必定在vj之前

拓扑排序算法的思想

1.输入AOV网络,令n为顶点个数
2.在AOV网络中选一个没有直接前驱的顶点并输出
3.从图中删除该顶点,同时删除它所有发出的有向边
4.重复上面2,3步骤,直到
全部顶点均已输出,拓扑有序序列形成,拓扑排序完成或,
图中还有没有输出的顶点,但已跳出处理循环。这说明图中还剩下一些顶点,他们都有直接前驱,再也找不到没有前驱的顶点了。这时,AOV网络必定存在有向环。

也就是说,如果找得到拓扑结构就是一定不存在环
找不到,一定存在环

下面以一个小例子说明:
在这里插入图片描述
所以,最后得到的有向图的拓扑有序序列为:
6,1,4,3,2,5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值