我正在寻找一些哈密尔顿循环算法,但我找不到任何实现,甚至没有一个伪代码!我甚至不需要输出循环,只需检查图表是否有一个循环。输入是具有V顶点和E边的图。此外,我想有一个算法来检查图形是否有哈密顿路径。我不需要输出路径,只需检查它是否有路径。两者都应该是多项式时间。
答案 0 :(得分:1)
问题是NP-Complete问题之一。
强力算法只是创建所有排列并检查其中一个是否是可行的解决方案。
检查可行性:
让当前排列为v1,v2,...,vn
:如果每个i
在图表中都有边v_i -> v_(i+1)
,还有v_n->v1
- 则解决方案是可行的。
另一种方法是创建图G'=(V,E',w)
,其中新边E' = VxV
(所有边)和权重函数为:
w(u,v) = 1 if there is an edge (u,v) in the original graph
infinity otherwise.
现在你得到了Traveling-salesman problem,可以通过O(n^2*2^n)
答案 1 :(得分:1)
除非P = NP,否则在多项式时间内不能确定一般图的汉密度。
在http://fhcp.edu.au/slhweb/存在在线HCP启发式,您可以在其中上传图表并对其进行测试,但如果您需要自己的功能,则需要自己编写,或者拼接其他人的功能。 Andrew Chalaturnyk写了一个非常好的算法。