检查密集图中是否存在Hamilton循环

时间:2012-06-25 08:50:28

标签: c++ graph hamiltonian-cycle

首先是几个定义:

定义1

  

如果对于每对非相邻顶点u和v,d(u)+ d(v)> = n,则图G =(V,E)称为“密集”     其中n = | V |和d(*)表示顶点的程度*

定义2

  

G上的“哈密顿循环”是一个顶点序列(vi1,vi2,...... vin,vi1),所有l!= h和{vil,vil}的vil!= vih G的边缘。

问题是:编写一个程序,给定一个密集的无向图G =(V; E)作为输入,确定G是否在G上允许哈密顿循环并输出该循环(如果有的话),或输出`` N''如果没有。

我的解决方案是找到从源开始的所有可能路径,并检查是否存在返回此源的路径。不幸的是,这种解决方案效率不高。

有什么建议吗?谢谢。

2 个答案:

答案 0 :(得分:7)

根据Ore's theorem,满足定义1的图总是具有哈密顿循环,而Palmer's algorithm将在O(n 2 )中给出一个。

答案 1 :(得分:-2)

问题是NP难。所以我不希望任何解决方案比蛮力更快。