在我学习了如何确定一个有向图是否有1个拓扑序之后,我有点好奇是否有一种方法可以确定是否有正好有2个拓扑序的图。首先,有两种拓扑类型的图吗?
我学会了使用哈密顿路径来确定DAG是否具有唯一的拓扑排序这在某种程度上适用吗?
谢谢

最佳答案

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

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的话:
有向图有唯一的拓扑序当且仅当
中每对连续顶点之间的定向边
拓扑序(即有向图有哈密顿路径)。如果
有向图有多个拓扑序,然后是第二个拓扑序
顺序可以通过交换一对连续的顶点来获得。

关于algorithm - 如何查找有向图是否具有两个拓扑顺序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35399792/

10-12 18:49