拓扑排序是一种在有向无环图(Directed Acyclic Graph,又称 DAG 图)中寻找拓扑序列的算法。
所谓拓扑序列,本质上是一种线性序列,它的特殊之处通过一个例子给大家讲解:
图 1 有向无环图
图 1 是一张有向无环图,由 9 个顶点和 11 条弧组成。观察这张图,写出一种能满足以下两个条件的线性序列:
- 包含图中所有的顶点,且每个顶点只能在序列中出现一次;
- 用 A->B 表示图中的各个弧,序列中必须保证 A 顶点位于 B 顶点的前面。
符合以上两个要求的线性序列,就称为拓扑序列。图 1 对应的拓扑序列有很多种,比如:
V1,V2,V3,V4,V5,V6,V7,V8,V9
V1,V4,V3,V2,V6,V5,V8,V7,V9
V1,V3,V2,V4,V5,V8,V7,V6,V9
拓扑序列的应用场景很广泛,仍以图 1 为例,我们可以将图中的顶点和弧分别想象成:
- 将 V1~V9 看做是某个工厂的 9 个车间ÿ