我遇到了这个问题:
假设我们在字母 {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 至少一次)
感谢任何提示或帮助。
答案 0 :(得分:1)
如果我正确地理解了这个问题,就需要对所述问题的目标进行严格的下限。这样的绑定实际上是实例的最小生成树;距离将是X
和Y
节点之间的成对最短路径(在这种情况下是一些离散的Euklidean距离)。考虑到看起来像
YXXXXX...X
其中生成树的权重(即要访问的节点数减1)与从Y
到最右边X
节点的最短路径的权重相匹配。总的来说,不需要修改Kruskal的算法来计算最小生成树。