我解决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)。
我的朋友说它无法看到一般答案。因为精确的平面图非常困难。它无法判断哈密尔顿的道路。
一般情况下我怎么能找到哈密顿路径?
答案 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元代码或单调格雷码。