我正在看我的算法书,我发现有一个简单的算法可以通过逐个删除源节点来线性化单个源有向无环图。有人能给我举个例子来说明为什么这不适用于多个来源吗?
是的,您可以使用源删除算法对由任意数量的不同组件组成的广义 DAG 进行拓扑排序,这些组件是简单的 DAG。
证明并不难。你应该亲自尝试一下。如果你看不懂,请询问,我会给出一个大纲。
但是有一种更简单的方法来进行拓扑排序。将新的主源节点连接到具有单边的所有 DAG 源,然后从主源进行深度优先搜索,按后序应用节点编号(即,在访问其所有后代之后,对每个节点连续编号)。主源获得最高编号。忽略这个。剩余的节点号以相反的顺序进行拓扑排序。 即不需要像源删除算法那样解构图。