检查有向图是否只有一个拓扑排序

时间:2017-12-30 19:04:16

标签: directed-graph topological-sort

我试图为算法编写伪代码,该算法假设检查有向图是否只有一个拓扑排序。我已经提出了拓扑排序的伪代码(使用DFS),但它似乎对我没什么帮助。我想知道那个图中是否没有接收器 - 然后没有一个拓扑排序(可能有帮助吗?)。

1 个答案:

答案 0 :(得分:0)

这是对this answer的改进,因为当它在没有传出边的顶点处开始时,最好的运行时会得到改善。

如果您的有向图有N个顶点,并且您只有一个具有indegree 0的起始顶点,

  • 执行DFS(但仅在起始顶点上)以获得拓扑排序L
  • 如果L没有N个顶点,则某些顶点无法访问(这些顶点是循环的一部分),或者您需要另一个起始顶点(因此有多个顶点)。
  • i中的[0,N-2]
    • 如果L[i]L[i+1]没有边缘,
      • 返回false。
  • 返回true。

或者,修改Kahn的算法:如果算法运行时集合中的多个顶点(indegree 0的顶点),则返回false。否则,返回true。