如何在立方体中找到一条哈密顿路径((2n)^ 3)?

时间:2011-11-23 04:59:03

标签: algorithm graph graph-theory

我解决acm-icpc问题是一种图论。

  

旅行蜘蛛是一个逻辑难题,需要一系列的   许多替代品中的系统选择。这个谜题假定为   几何对象,其表面被划分为一组区域   称为通常一致或非常相似的细胞   形状和大小。蜘蛛可以在表面上自由移动   但是,对象可以从一个单元格向前移动到其中一个单元格   每个步骤中的相邻单元格。现在,考虑到一些男性和男性   雌性蜘蛛,最初定位在不同的细胞中,我们想要的   找到一组分别引导每只雄性蜘蛛的路径   他的搭档。唯一的条件是对象的每个单元格都必须   在他们的遍历过程中,只有一只雄性蜘蛛被访问过一次。

立方体存在于空间[0,2n] x [0,2n] x [0,2n]中,并且n可以是2 <= n <= 50。

当我从A到B开始两个位置比赛时,我们必须找到一条哈密顿路径。

并打印所有路径(1 0 1 - &gt; 1 0 3 - &gt; .... - &gt; 3 1 4)。

我的朋友说它无法看到一般答案。因为精确的平面图非常困难。它无法判断哈密尔顿的道路。

一般情况下我怎么能找到哈密顿路径?

2 个答案:

答案 0 :(得分:3)

看起来像Gray code问题,特别是n-ary Gray code

格雷码是汉密尔顿循环,但是你正在寻找一个带有端点A和B的哈密尔顿路径。我不确定,但也许Monotonic Gray codes可以提供帮助。如果可以在V_i中对多维数据集顶点进行分区,那么V_0 = {A}, V_n = {B}比文章中的构造可以解决问题。

编辑:维基百科页面上有一篇参考文献,来自The Art Volume 4A的Knuth的n-tuple generation草稿。

答案 1 :(得分:1)

问题是NP已完成,您需要强行执行每条可能的路径。见这里:Algorithms to find the number of Hamiltonian paths in a graph。但是,在你的任务中有一个快捷方式,因为它是一个rubic立方体,一个rubics立方体的灰色代码遍历是一个哈密顿路径。有一种灰色代码遍历rubic立方体的方法。例如,如果你有一个八叉树并且你发现了哈密尔顿路径,你很可能找到了一个空间填充曲线,将3d减少到1d复杂度。然后,您可以从上到下或从下到上对路径进行排序。当您有其他5个空间填充曲线时,您可以拥有其他列表。这是一个解释欧拉路径和汉密尔顿路径之间差异的链接:Difference between hamiltonian path and euler path。这是一个希尔伯特曲线http://www.tiac.net/~sw/2008/10/Hilbert/的例子,它使用二进制反射代码,而不是n元代码或单调格雷码。