拓扑排序的概念
- 设有1个有向无环图(DAG,Directed Acyclic Graph)
- 对其进行拓扑排序,即求其中节点的一个拓扑序列
- 对于所有的有向边<U,V>(由U指向V),在该序列中节点U都排列在节点V的前面
- 满足该要求的节点序列,被称为拓扑排序的序列。
拓扑序列求法
重复以下操作直到所有的节点和边都从原图中删掉:
- 选择一个入度为0的节点,作为序列中的节点
- 当该节点被选为序列的第一个顶点后,将该点从图中删掉
- 同时删掉以该节点为弧尾的所有边
注意:若在所有节点尚未被删掉时,就出现了找不到入度为0的节点的情况,则说明剩余节点形成一个环路,拓扑排序失败,原图无拓扑序列。
判断是否存在环
若所有节点的入度都不为0,则有环。
拓扑排序的应用
通常用来排序具有依赖关系的任务。