我指的是Skienna的算法书。
测试图G
是否包含Hamiltonian path
的问题是NP-hard
,其中哈密顿路径P
是一个只访问每个顶点一次的路径。与汉密尔顿周期问题不同,G从结束顶点到P的起始顶点不一定有边缘。
给定有向非循环图G(DAG
),给出O(n + m)
时间算法来测试它是否包含哈密顿路径。
我的方法,
我打算使用DFS
和Topological sorting
。但我不知道如何将这两个概念联系起来解决问题。如何使用拓扑排序来确定解决方案。
有什么建议吗?
答案 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形成汉密尔顿路径。您不需要遍历图中的每条边以使路径成为哈密顿量。