在DAG中查找Hamilton路径的算法

时间:2013-04-20 20:26:12

标签: algorithm graph-algorithm directed-acyclic-graphs hamiltonian-cycle

我指的是Skienna的算法书。

测试图G是否包含Hamiltonian path的问题是NP-hard,其中哈密顿路径P是一个只访问每个顶点一次的路径。与汉密尔顿周期问题不同,G从结束顶点到P的起始顶点不一定有边缘。

给定有向非循环图G(DAG),给出O(n + m)时间算法来测试它是否包含哈密顿路径。

我的方法,

我打算使用DFSTopological sorting。但我不知道如何将这两个概念联系起来解决问题。如何使用拓扑排序来确定解决方案。

有什么建议吗?

2 个答案:

答案 0 :(得分:43)

您可以首先在O(n + m)中对DAG进行拓扑排序(每个DAG可以进行拓扑排序)。

完成此操作后,您就会知道边缘从较低的索引顶点到较高的索引顶点。 这意味着当且仅当连续顶点之间存在边缘时才存在哈密顿路径,例如,

(1,2), (2,3), ..., (n-1,n).

(这是因为在哈密尔顿路径中你不能“回去”而你必须访问所有,所以唯一的方法是“不要跳过”)

您可以在O(n)中检查此条件。

因此,总体复杂度为O(m + n)。

答案 1 :(得分:1)

我不认为@agassaa的陈述是完全正确的。考虑其中存在三个节点“A”,“B”,“C”和边缘A-> B,B-> C,A-> C的简单示例。当A有两个孩子而C有两个父母时,A-> B-> C形成汉密尔顿路径。您不需要遍历图中的每条边以使路径成为哈密顿量。

A DAG that has Hamiltonian cycle