Algorithm 有向图的所有顶点都存在路径吗?

Algorithm 有向图的所有顶点都存在路径吗?,algorithm,directed-graph,Algorithm,Directed Graph,给定G,一个有向图,是否有一条路径(不一定是简单路径)穿过G中的所有顶点 我首先需要检查无环图和强连通图中发生了什么,然后使用强连通分量图为一般图找到一个解决方案 到目前为止,我已经发现,对于强连通图,总是有一条路径。对于非循环图,如果有多个源,则路径将永远不存在。此外,如果存在一个D out大于1的顶点,则路径将永远不存在 问题是,我不确定最后一个是正确的,如果它是错误的,我的算法是错误的。最后一个假设是不正确的,例如,看看图G=(V,E),其中E={(V_I,V_j)| I1[假设|v|>3

给定G,一个有向图,是否有一条路径(不一定是简单路径)穿过G中的所有顶点

我首先需要检查无环图和强连通图中发生了什么,然后使用强连通分量图为一般图找到一个解决方案

到目前为止,我已经发现,对于强连通图,总是有一条路径。对于非循环图,如果有多个源,则路径将永远不存在。此外,如果存在一个D out大于1的顶点,则路径将永远不存在


问题是,我不确定最后一个是正确的,如果它是错误的,我的算法是错误的。

最后一个假设是不正确的,例如,看看图
G=(V,E)
,其中
E={(V_I,V_j)| I
图显然是一个DAG。因此,找到最大强连通分量不会改变图。另外-图有一个哈密顿路径,但是
d_out(v_1)>1
[假设
|v|>3
]

然而,你在正确的轨道上

高级伪代码中的算法:

  • 在图中找到最大强连通分量 生成的图形是DAG
  • 对结果图1使用拓扑排序
  • 检查有序排序是否创建了哈密顿路径
  • 如果为-return true,否则返回false
  • 声明:

    当且仅当DAG表示 图的MSCC具有哈密顿路径

    索赔证明:

    如果存在这样一条路径,则将其设为
    v0->v1->…vm

    让我们把
    V_i
    表示为
    V_i
    所在的最大强连通分量。
    现在,对于原始图形
    v0->v1->…->vm
    中的路径,MSCC图形2中也有一条路径:
    V_0->V_1->…->V_m

    请注意,如果
    V_i
    在上述路径中出现两次[或更多]——这两种情况彼此相邻,否则发现的MSCC不是最大的,因为如果
    V_i->V_k->…->V_i
    是可行路径——那么V_i和V_k不是最大的,因为可以将它们合并成一个更大的SCC。
    现在,对于每一个
    V_i
    将所有发生的事情折叠成一个,你就得到了一条路径-每个
    V_i
    最多出现一次[我们刚刚说明了原因],而恰恰是一个[因为每个
    V_i
    都在原始路径上,我们没有完全删除MSCC的-只是折叠它们]。
    因此,生成的路径是MSCC图中的哈密顿路径

    建议公式正确性证明:
    因为我们显示了MSCC图中的哈密顿路径存在当且仅当原始图中存在请求的路径-那么:
    ->
    算法返回true->算法在DAG中找到一条哈密顿路径->在DAG中有一条哈密顿路径[foot note 1]->在原始图形中有一条请求的路径。
    算法没有在DAG中找到哈密顿pat->DAG中没有哈密顿路径[脚注1]->原始路径中没有请求的路径

    Q.E.D.


    1:在DAG中,如果存在哈密顿路径,则存在唯一的拓扑排序,如果存在哈密顿路径,则是拓扑排序中顶点的顺序。因此,在DAG中,找到哈密顿路径是很容易的。

    2:实际上,这是一个小小的修改,
    V_i->V_i
    在MSCC图上并不是一条真正的边,但现在让我们把它表示为一条边。

    你是在问如何解决这个问题吗?或者,如果最后一个假设是正确的[提示:它不是,例如,
    E={(v_i,v_j)|i
    ,有这样的顶点,
    d_out(v)
    >1,并且仍然有一条路径穿过所有顶点-甚至是哈密顿路径]是的,我不确定最后一个,你确认了。。所以我现在需要一些帮助谢谢你的回答。。。但是哈密顿路径不一定是一条简单的路径吗???@Nusha:是的,但我要说的是,在DAG中有一条哈密顿路径,代表图的MSCC,而不是图本身。MSCC图中的哈密顿路径意味着原始图上所有顶点的路径。@Nusha:我添加了更详细的解释[和证明]来说明算法的正确性。