访问网格上每个“特殊”点所需的最少步骤

时间:2016-04-01 07:24:36

标签: algorithm search a-star traveling-salesman

我遇到了这个问题:

假设我们在字母 {0,X,Y} <上有 m by n 网格配置(或矩阵) G / p>

G =
0 0 X .. X
0 0 X .. 0
X Y 0 .. X
::::
0 X 0 .. 0

Y Y 访问每个 X 所需的最小步数上找到一个好的下限 >至少一次 Y 可以移动网格(矩阵中 X 的Ieeach) >一次向上向下一个单元

(网格 G 中的 Y X 被任意放置, Y X 可以在矩阵的任何位置,矩阵上 X 的数量也是任意的,必须完全矩阵上有一个 Y

当然,没有某种数学公式可以给出确切的步骤数(因为它是TSP问题)。

但是我们怎样才能找到实际步数的足够 紧密下限(例如,使用算法相对容易计算)?

我已经看到了建议:

Using A* to solve Travelling Salesman

有人建议,最小生成树的总成本可能是TSP问题的良好下限。

但与此处的问题形成鲜明对比的是,在此问题中,我们 必需访问每个 在网格上点,但我们必需至少访问网格上的每个“特殊”点并找到它们我们可能需要访问网格上的一些“非特殊”点,所以我不知道最小生成树对于这个问题是怎样的(也许如何调整Kruskal的算法)找到它。)

(注意:我在试图找出 A * 网格搜索的启发式时遇到了这个问题,该搜索计算了 Y 的路径,该路径必须访问每个网格上的 X 至少一次)

感谢任何提示或帮助。

1 个答案:

答案 0 :(得分:1)

如果我正确地理解了这个问题,就需要对所述问题的目标进行严格的下限。这样的绑定实际上是实例的最小生成树;距离将是XY节点之间的成对最短路径(在这种情况下是一些离散的Euklidean距离)。考虑到看起来像

的实例,可以看到边界的紧密度
YXXXXX...X

其中生成树的权重(即要访问的节点数减1)与从Y到最右边X节点的最短路径的权重相匹配。总的来说,不需要修改Kruskal的算法来计算最小生成树。