推箱子中有些格子一旦放入箱子,就不可能再推到任何目标。目标反向分析能提前排除这些位置,但它并不等于已经求出了完整关卡解法。
地图只包含墙、地面和目标,暂时忽略其他箱子,并假设玩家能到达任何需要的站位。反向搜索时,从当前箱子格q沿方向退到p,只有p和玩家原本要站的p再退一格都不是墙,才允许这个反向步骤。
坐标横x、纵y都从零开始,地图为七乘七。井号为墙,G为目标,点为普通地面。
原地图: ####### #G....# #.....# #.#...# #.....# #.G..## ####### 反向最少推数(#墙,X无法到目标): # # # # # # # # 0 1 2 3 X # # 1 2 3 4 X # # 2 # 3 4 X # # 3 3 2 3 X # # X 0 1 X # # # # # # # # # 死格坐标:[(1, 5), (4, 5), (5, 1), (5, 2), (5, 3), (5, 4)]
阅读记录时先确认编号代表的是格子、对象、时间还是数组位置,再逐项对应输入与输出。中间状态提供了定位差异的依据,最后的一个合计数字不能替代全部步骤;没有对象的集合与数值零也应区别看待。
以全部目标为起点得到最少推数,未被找到的地面标为X。在这个放宽玩家走位的模型中仍无法到目标的位置,真实关卡也无法到达;已找到的位置则只说明没有被这项检查排除。
其他箱子的阻挡、玩家绕行是否可达以及多个目标之间的相互影响均未纳入。墙角只是某些死格的直观例子,不能据此认为所有非墙角格都安全,也不能把反向距离直接当成真实解法总步数。
可以遮住结果表先按规则复算第一步,再选择一个边界输入重复操作。若更换规则中的任一前提,应重新推导结果,不要只调整最后答案。这样既能理解本例为何成立,也能看清它在哪些情况下不再适用。