拓扑排序(Topological Sorting)
在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序:
- 每个顶点出现且只出现一次;
- 若A在序列中排在B的前面,则在图中不存在从B到A的路径。
用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,称为AOV网(Activity On Vertex Network)。
另外,AOV网是一种有向无回路的图。那么,每个AOV网都至少存在一个拓扑排序。
拓扑排序算法
对AOV网进行拓扑排序的基本思路如下:
- 从AOV网中选择一个入度为0的顶点输出
- 删除此顶点,并删除以此顶点为尾的弧(更新顶点入度)
- 继续重复前面两个步骤,直到全部定点输出
大概流程图如下图所示:
算法实现
/**
* @description 拓扑排序算法(TopologicalSort)
* 输入:领接表表示的有向图
* 输出:若图无回路,则输出拓扑排序序列并返回OK
* 若图有回路,则返回ERROR.
* @author GongchuangSu
* @since 2016.04.19
* @version v1.0
*/
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public