拓扑排序

目录

一、概念

二、算法 

三、代码

四、题目

1.Genealogical tree

2.Sorting It All Out

3.Labeling Balls

4.Following Orders


一、概念

一个无环的有向图称为有向无环图

有向无环图是描述一个工程、计划、生产、系统等流程的有效工具。一个大工程可分为若干个子工程(活动),活动之间通常有一定的约束,例如先做什么活动,什么活动完成后才可以开始下一个活动。

用顶点表示活动,用弧表示活动之间的优先关系的有向图,称为顶点表示活动的网,简称AOV网

在AOV网中,若从顶点i到顶点j之间存在一条有向路径,称顶点i是顶点j的前驱,或者称顶点j是顶点i的后继。若<i,j>是图中的,则称顶点i是顶点j的直接前驱,顶点j是顶点i的直接后继

AOV网中是不允许有环的,否则会出现自己是自己的前驱,陷入死循环。可以对有向图的顶点进行拓扑排序,如果AOV网中所有的顶点都在拓扑序列中,则AOV网中必定无环。

拓扑排序是指将AOV网中的顶点排成一个线性序列,该序列必须满足:若从顶点i到顶点j有一条路径,则该序列中顶点i一定在顶点j之前。

如何进行拓扑排序呢?拓扑排序的基本思想:

①选择一个无前驱的顶点并输出;

②从图中删除该顶点和该顶点的所有发出边;

③重复①和②,直到不存在无前驱的顶点;

④如果输出的顶点数小于AOV网中的顶点数,则说明网中有环,否则输出的序列即为拓扑排序。

举例,学生应该按照怎样的顺序来学习下面这些课程

课程编号 课程名称 先修课程
C_{0} 程序设计基础
C_{1} 数据结构 C_{0}C_{2}
C_{2} 离散数学 C_{0}
C_{3} 高级程序设计 C_{0}C_{5}
C_{4} 数值分析 C_{2}C_{3}C_{5}
C_{5} 高等数学

如果用顶点表示课程,弧表示先修关系,若课程i是课程j的先修课程,在用弧<i,j>表示,课程之间的关系如图所示

C_{0}C_{5}都无前驱,先输出C_{0},删除C_{0}C_{0}的所有发出边,如图(a)所示;

此时C_{2}C_{5}都无前驱,输出C_{5},删除C_{5}C_{5}的所有发出边,如图(b)所示;

此时C_{2}C_{3}都无前驱,输出C_{2},删除C_{2}C_{2}的所有发出边,如图(c)所示;

此时C_{1}C_{3}都无前驱,输出C_{3},删除C_{3}C_{3}的所有发出边,如图(d)所示;

此时<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值