查找图中的哈密顿路径数的算法

| 我正在尝试解决汉密尔顿路径问题的稍微修改的版本。对其进行了修改,因为已将起点和终点提供给我们,而不是确定解决方案是否存在,我们希望找到解决方案的数量(可以为0)。 该图以二维数组的形式提供给我们,节点是数组的元素。另外,我们只能水平或垂直移动,而不能对角移动。不用说,我们不能从一个城市到两个城市,因为要做到这一点,我们将需要两次访问一个城市。 我编写了一个蛮力解决方案,尝试在每个节点上尝试所有4个(边缘节点为3或2个)可能的移动,然后计算解决方案的数量(达到目标时也看到了所有其他节点),但是它在大小适中的输入(例如7x7阵列)上运行了可笑的时间。 我也考虑过使用双向搜索,因为我们知道目标,但这并没有真正的帮助,因为我们不仅希望满足这些要求,而且还希望确保已访问所有节点。此外,可能是当两个条纹之间的所有节点都用尽时,它们以无法连接的方式结束。 我觉得有些事情我不知道,只剩下蛮力解决方案了。我知道问题本身是NP完全的,但是我想知道在蛮力方面是否有任何改进。有人可以提出其他建议吗? - 编辑 - 我提到使用双向搜索并没有真正的帮助,我想阐明为什么会这样。考虑一个2x3图,左上角和右下角分别是起点和目标。让双向搜索的边缘从目标向右移动,从目标向左移动。经过2次移动后,所有节点都将被访问,但是由于我们只能从一个节点向一个方向前进,因此无法加入边缘。但是,正如大卫在下面的回答中指出的那样,可能可以对算法进行一些修改。     
已邀请:
根据Wolfram Alpha,   ...确定的唯一已知方法   给定的一般图是否具有   哈密​​顿主义的道路是承担   详尽搜索 我相信您会想从找到一条哈密顿路径开始,然后将其分为两条路径,使分割点尽可能清楚地将两条路径分开。然后,您可以在子图中找到排列(当然,还有递归!) 我不知道确切的算法,但是这种分而治之的方法是我的起点。     
在https://mathoverflow.net/questions/36368/ficient-way-to-count-hamiltonian-paths-in-a-grid-graph-for-a-given中,有人在数学溢出问题上提出了一个与您非常相似的问题-pair-of-vert和(1)他们没有收到大量的“这里是如何有效执行”响应(这可能意味着没有简单的方法),(2) Mathematica显然需要5个小时来计算7x7网格上相对角之间的路径,因此您可能做的并不太错,并且(3)答案中有一些有趣的指针。     
您仍然可以使用双向搜索,只需在搜索中添加一个约束,这样先前看到的节点就不会成为搜索的候选对象。 您可以采用的另一种方法可以将其推广到可并行使用的解决方案中,那就是将搜索分成更小的搜索。 例如,尝试通过解决以下问题来解决您的原始问题:   对于每个节点(不是起点或终点),找到从起点到n(set1)以及从n到终点(set2)的所有路径。 找到
set1
set2
之后,可以舍弃其叉积的所有具有除节点have2ѭ以外的公共节点的元素。     
在7x7阵列(即总共7 * 7 = 49个节点)上,使用O(n!)算法或O(2 ^ n * n ^ 2)算法都将花费太多时间。 也许有某种方法可以考虑到此特定图形的特殊特性(例如,每个节点最多具有4条边)来加快此过程,但是似乎无法实现快速求解(除非有人偶然为Hamiltonian Path问题找到了多项式时间算法) )。     

要回复问题请先登录注册