Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 哈密顿圈算法_Algorithm_Graph_Pseudocode_Hamiltonian Cycle - Fatal编程技术网

Algorithm 哈密顿圈算法

Algorithm 哈密顿圈算法,algorithm,graph,pseudocode,hamiltonian-cycle,Algorithm,Graph,Pseudocode,Hamiltonian Cycle,我在寻找一些哈密顿循环算法,但我找不到任何实现,甚至连一个伪代码都找不到!我甚至不需要输出循环,只需检查图表是否有循环。输入是一个具有V顶点和E边的图。另外,我想有一个算法来检查一个图是否有哈密顿路径。我不需要输出路径,只需检查它是否有路径。这两个问题都应该是多项式时间的。这是一个NP完全问题 蛮力算法只是创建所有置换,并检查其中一个置换是否可行 检查可行性: 让当前排列为v1,v2,…,vn:如果每个i在图中都有一条边v_i->v_(i+1),并且v_n->v1,那么解决方案是可行的 另一种

我在寻找一些哈密顿循环算法,但我找不到任何实现,甚至连一个伪代码都找不到!我甚至不需要输出循环,只需检查图表是否有循环。输入是一个具有V顶点和E边的图。另外,我想有一个算法来检查一个图是否有哈密顿路径。我不需要输出路径,只需检查它是否有路径。这两个问题都应该是多项式时间的。

这是一个NP完全问题

蛮力算法只是创建所有置换,并检查其中一个置换是否可行

检查可行性:
让当前排列为
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.

现在你得到了一个,可以用动态规划在
O(n^2*2^n)

中求解它,除非p=NP,否则一般图的哈密顿性不能在多项式时间内确定


在线HCP启发式存在于您可以上传图形并对其进行测试的位置,但如果您想要自己的函数,则需要自己编写,或者拼接到其他人的函数中。Andrew Chalaturnyk写了一个非常好的算法。

那么,这意味着它不能在多项式时间内求解?因为有人告诉我这是可能的。我不需要找到循环,只要检查图表是否有循环就行了。你能给我一个关于蛮力方法的算法或伪代码吗?我只需要写一个函数,如果一个图有一个哈密顿圈,它将返回true。我认为存在一个更好的蛮力算法,正如你建议的那样,它将执行常量
n操作,而在某些图中这是一种严重的过度杀伤力(稀疏、邻居数量有限等)。@clu我建议如何使用蛮力进行此操作,只需生成所有排列并检查它们(解释了如何检查它们)。如何生成所有排列包含在SO中的一系列问题中。由于这个问题是NP完全的,这意味着我们不知道是否存在多项式解,一般的假设是它确实无法实现,但它还没有被证明。好吧,但是我如何在C语言中实现它呢?