定义:在与该图“相容”的前提下,将所有顶点排成一个线性序列。“相容”是指每一顶点都不会通过边指向其在此序列中的前驱顶点。
拓扑排序算法可以概括成寻找极值的算法,如果我们认为前驱顶点大于后继顶点的话。
算法一:
- 寻找极大值
- 只要将入度为0的顶点m(及其关联边)从图G中取出,则剩余的G'依然是有向无环图,故其拓扑排序也必然存在。从递归的角度看,一旦得到了G'的拓扑排序,只需将m作为最大顶点插入,即可得到G的拓扑排序。
算法二:
- 寻找极小值
- 与算法一类似,只是取出的顶点是出度为0的点,然后将得到的序列逆序排列。
- DFS搜索中的最早被标记为VISITED的点,一定是极小值点,由此可得一种基于DFS的实现