【问题标题】:Visit all nodes exactly once in a directed graph在有向图中只访问所有节点一次
【发布时间】:2017-05-22 18:16:31
【问题描述】:

我有一个有向图,我想找到一条访问每个节点的路径恰好一次。我想以非常复杂的方式做到这一点。这可能吗?如果是,如何?

【问题讨论】:

  • 回答您的问题:是的,这是可能的。到目前为止,您尝试过什么?
  • 我运行一个 bfs 并保留一个位掩码,说明我访问了哪些节点。
  • 你能解释一下我们该怎么做吗?
  • @codePG 你能写出你的解决方案吗?
  • 抱歉,stackoverflow.com 不是代码编写服务。

标签: c++ path directed-graph


【解决方案1】:

您正在搜索Hamiltonian path,这是一个简单的开放路径,每个节点只包含一次。

在给定图中找到哈密顿路径是NP-complete。事实上,确定给定(有向或无向)图是否包含哈密顿路径已经是 NP 完全的(通过例如vertex cover problem 的简化证明)。

如果你还想编码,这里是an implementation on github。如果你想要一个快速的解决方案,也许启发式就足够了(例如inspired by DNA molecules,或者在图的子集上快速运行的解决方案。例如,如果你有一个 DAG,你可以进行拓扑排序,然后检查是否连续的顶点是连通的。如果是这样,拓扑排序给出哈密顿路径。

【讨论】:

    猜你喜欢
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    相关资源
    最近更新 更多