如何查找有向图是否有两个拓扑排序?

时间:2016-02-15 00:31:35

标签: algorithm data-structures graph graph-theory topological-sort

在我学会了如何确定有向图是否具有1个拓扑排序之后,如果有一种方法可以确定是否存在具有2的图,我有点好奇。首先,是否存在有2个图的真实情况拓扑排序?

我学会了使用哈密尔顿路径来确定DAG是否具有唯一的拓扑排序。这是否适用于此? 感谢

1 个答案:

答案 0 :(得分:5)

如果在第(*)行,你可以从2个不同的节点中选择一次 - 有两个拓扑排序

L ← Empty list that will contain the sorted elements
S ← Set of all nodes with no incoming edges
while S is non-empty do
    remove a node n from S (*)
    add n to tail of L
    for each node m with an edge e from n to m do
        remove edge e from the graph
        if m has no other incoming edges then
            insert m into S
if graph has edges then
    return error (graph has at least one cycle)
else 
    return L (a topologically sorted order)

更准确地引用R. Sedgewick:

  

当且仅当存在时,有向图才具有唯一的拓扑排序   在每对连续顶点之间的有向边   拓扑顺序(即,有向图具有哈密顿路径)。如果   有向图具有多个拓扑排序,然后是第二个拓扑   可以通过交换一对连续的顶点来获得顺序。