找到访问网格上所有非阻塞方块的最短路径

时间:2010-05-20 16:49:18

标签: algorithm path-finding traveling-salesman

假设您有一个这样的网格(随机制作):

grid

现在让我们假设您有一辆汽车从其中一个盒子中随机开始,最短路径将通过每个白盒子?您可以根据需要多次访问每个白盒,也不能跳过黑盒子。黑匣子就像墙壁。简单来说,您只能从白框移动到白盒。

你可以向任何方向移动,甚至是对角移动。

两个子问题:

  1. 假设您在移动之前知道所有黑匣子的位置。
  2. 假设您在相邻的白框中只知道黑匣子的位置。

6 个答案:

答案 0 :(得分:4)

您应该将问题建模为一个完整的图形,其中两个节点之间的距离(白框)是这些节点之间最短路径的长度。可以通过Floyd-Warshall算法计算这些路径长度。然后,您可以将其视为"Traveling salesman",就像glowcoder所写。

编辑:更清楚:你可以通过一系列不同的白框来描述迷宫中每条“有趣”的路径。因为如果你有一个访问每个白盒的任意路径,你可以将它分成子路径,每个子路径到目前为止未访问的新白盒结束。从白框A到B的每个子路径可以用从A到B的最短子路径替换,这就是为什么需要所有节点对之间的最短路径矩阵。

答案 1 :(得分:1)

这似乎是NP-Complete问题。

网格图中的哈密顿路径是NP-Complete,如下所示:Hamilton Paths in Grid Graphs

注意网格图=完整网格的子图。

当然,我还没看过那张纸,所以先确认一下,特别是对角线的移动允许部分。

答案 2 :(得分:1)

Doc得到了它。我要补充一点,黑盒子只会改变所有白盒子之间的距离。进一步详细说明 - 如果任意两个白色方框之间的对角线上有一个黑框(容易检查),则需要计算最短路径以获得距离。获得距离矩阵后,在创建长度为零的虚拟节点到所有其他节点后,通过求解TSP来求解TSP或哈密顿路径。

关键是,为了制定和解决TSP(或任何问题的制定),你必须有一个距离矩阵开始。距离矩阵在开始时未指定,因此必须从头开始。

答案 3 :(得分:1)

虽然基于TSP的启发式算法是一种合理的方法,但目前尚不清楚它是否能给出最佳答案。问题(正如Moron所指出的)是跨越轨迹问题,并且在评论中提供的链接中,存在许多具有线性时间最优解的特殊情况。使得OP的问题与所引用的论文中使用的网格图形式不同的一个问题是能够沿对角线穿越,这会使游戏发生相当大的变化。

答案 4 :(得分:0)

这类似于Knights Tour问题,其中典型的解决方案评估源自起始广场的所有可能路线。当巡回演出无法完成时,则使用回溯来返回以前的决定。由于您可以多次访问广场,因此您的问题更加轻松。骑士之旅和旅行塞勒曼问题通常需要访问每个广场一次。

请参阅http://en.wikipedia.org/wiki/Knight's_tour

答案 5 :(得分:-1)

尝试将其构建为图形(每个节点最多包含8个其他节点)并将其视为http://en.wikipedia.org/wiki/Travelling_salesman_problem