【发布时间】:2019-11-23 21:06:34
【问题描述】:
我正在尝试解决从头到尾在网格上移动对象的问题。我很了解 A* 寻路算法,但我对如何修改它以便处理我的问题有点不知所措:
我有一个 WxH 网格。我需要将星形框移动到空框位置(它们始终位于相同的位置:0,0 和 W-1,H-1)。我的出发点是空的 (W-1,H-1) 地方,我走的每一步都是非对角线的。如果我向上移动,我需要将阻挡我前进的盒子向下移动到空白空间,依此类推,直到我到达星星 (0,0),然后我需要开始以同样的方式向我的起点移动它。为方便起见,恒星的运动始终朝着起点的方向,从不偏离起点。我需要找到最短的路线,也就是将星星移动到起始位置所需的最短步数。
这显然是一个最短路径问题(可能是 A*),但我无法弄清楚这里需要进行哪些修改。我不是在寻找解决方案或答案,只是为了一个方向,因为我什至不知道应该从哪里开始。
附:网格也可能有不可移动的盒子,但是一旦我了解了问题本身背后的算法,我就可以处理这个问题
【问题讨论】:
-
有什么限制? (例如灰色单元格)为什么不使用琐碎的解决方案?
-
限制是它必须在 1s 下运行(即使对于中等大小的网格),并且可能存在无法移动的“阻塞单元格”。就像我写的那样,只允许对角线移动(但这实际上是一件好事,对我来说选择更少)。什么是简单的解决方案?
-
如果没有阻塞的单元格(例如灰色单元格),最佳解决方案是
8 * n - 11移动。对于阻塞的单元格,是的,您需要像 A* 这样的搜索算法(PS 是一个重要的事实......不是 PS :D 抱歉) -
是的,但即使有被阻塞的单元格,我应该将每个单元格视为我图中的一个节点,还是像答案中建议的人那样,将每个状态视为一个节点?
-
您编写的简单解决方案也建议宽度=高度。当它们不相等时会发生什么?
标签: java algorithm grid shortest-path