图论篇4——拓扑排序
引入 AOV网络 在 有向图 中,用顶点表示活动,用有向边<V i , V j >表示活动 i 是活动 j 的必须条件。这种有向图称为用顶点表示活动的网络(Active on vertices),简称AOV网络。 在AOV网络中,如果活动V i 必须在V j 之前进行,则存在有向边<V i , V j >,并称V i 是V j 的直接前驱,V j 是V i 的直接后继。这种前驱与后继的关系具有 传递性 和 反自反性 ,这要求AOV网络中 不能出现回路 ,即 有向环 。因此,对于给定的AOV网络, 必须先判断它是否存在有向环。 拓扑排序 检测有向环可以通过对AOV网络进行拓扑排序,该过程将各个顶点排列成一个线性有序的序列,使得AOV网络中所有的前驱和后继关系都能得到满足。 如果拓扑排序能够将AOV网络的所有顶点都排入一个拓扑有序的序列中,则说明该AOV网络中没有有向环,否则AOV网络中必然存在有向环。AOV网络的顶点的拓扑有序序列不唯一。可以将拓扑排序看做是将图中的所有节点在一条水平线上的展开,图的所有边都从左指向右。 用穿衣服的次序来描述拓扑排序,图(a)表示必须先穿某些衣服,才可以穿其他衣服,图(b)表示将拓扑排序后的有向无环图在一条水平线上展示出来。袜子和内裤属于同等级,在排序结果中谁先谁后无所谓。 算法描述 对于一个 有向无环图 (1)统计所有节点的入度