目录
一、概念
一个无环的有向图称为有向无环图。
有向无环图是描述一个工程、计划、生产、系统等流程的有效工具。一个大工程可分为若干个子工程(活动),活动之间通常有一定的约束,例如先做什么活动,什么活动完成后才可以开始下一个活动。
用顶点表示活动,用弧表示活动之间的优先关系的有向图,称为顶点表示活动的网,简称AOV网。
在AOV网中,若从顶点i到顶点j之间存在一条有向路径,称顶点i是顶点j的前驱,或者称顶点j是顶点i的后继。若<i,j>是图中的弧,则称顶点i是顶点j的直接前驱,顶点j是顶点i的直接后继。
AOV网中是不允许有环的,否则会出现自己是自己的前驱,陷入死循环。可以对有向图的顶点进行拓扑排序,如果AOV网中所有的顶点都在拓扑序列中,则AOV网中必定无环。
拓扑排序是指将AOV网中的顶点排成一个线性序列,该序列必须满足:若从顶点i到顶点j有一条路径,则该序列中顶点i一定在顶点j之前。
如何进行拓扑排序呢?拓扑排序的基本思想:
①选择一个无前驱的顶点并输出;
②从图中删除该顶点和该顶点的所有发出边;
③重复①和②,直到不存在无前驱的顶点;
④如果输出的顶点数小于AOV网中的顶点数,则说明网中有环,否则输出的序列即为拓扑排序。
举例,学生应该按照怎样的顺序来学习下面这些课程
课程编号 | 课程名称 | 先修课程 |
程序设计基础 | 无 | |
数据结构 | ||
离散数学 | ||
高级程序设计 | ||
数值分析 | ||
高等数学 | 无 |
如果用顶点表示课程,弧表示先修关系,若课程i是课程j的先修课程,在用弧<i,j>表示,课程之间的关系如图所示
和
都无前驱,先输出
,删除
和
的所有发出边,如图(a)所示;
此时和
都无前驱,输出
,删除
和
的所有发出边,如图(b)所示;
此时和
都无前驱,输出
,删除
和
的所有发出边,如图(c)所示;
此时和
都无前驱,输出
,删除
和
的所有发出边,如图(d)所示;
此时<