0%

马踏棋盘类问题公式解

本文为与基地的学弟交流讨论的过程的记录。

起因

一年一度的基地招新又要开始了,为了显得没那么水,我觉得每年还是要出点新题,不能总是使用题库的旧题,所以我就叫现在的副主席来出题,他最近好像莫名的跟马踏棋盘杠上了,然后我们就进行了一些讨论。

最初版最优步数公式解

下面是他最开始给我看的公式,以及他打印的图

他的公式是如何得出的我就不太清楚了,但是可以看出这个版本看起来还很复杂,而且有很多特例(没办法在[-4,4]x[-4,4]的区域确实很特殊),于是我也加入了寻找公式求解的方法。

我最初的错误思路

为了方便写,我们决定先把范围限制在$0\le x\le y$,对于$[0,4]$区域内就直接查表,我的想法是选择两种减小xy坐标且曼哈顿距离减少最快的走法的组合,来快速进入可查表的范围然后查表来解,我选择的是$(3,3)$和$(0,4)$,但是后来发现两个问题,一是表不一样,得初始一张,移动后修正一张,但是这样依然不能保证进入查表范围之后是在最优位置,所以这个凭感觉的想法宣告错误。

三元最优化问题

之后我又提出了另一个错误的猜想,任何一个点都能只使用三种步法到达,在$0\le x\le y$内是$(1,2),(2,1),(-1,2)$,然后我列出了下面这个东西

然后最优步数就是$\min (a+b+c)$

稍微化简一下能得到

然后最优步数就是$\min (x-y+2t)$,但是这里面有一个很大的问题,abc必须大于等于0,有些时候会没有解,所以三种步法应该是不一定能走到。

四元最优化问题

最后就是我的最终版本,绝对正确的方程组,唯一的问题就是解不出来

理解还是很简单的,abcd分别就是$(1,2)(2,1)(-1,2)(2,-1)$四种步法走多少步,负数步数就是反方向走,可以很显然的看出最优走法顺序无关,以及最优走法不会回头,出现第五种步法一定会跟前面四种反向,所以只需要四种步法就能走出最优解。

用最优步数作为第三个方程

之后我把这个方程组给了学弟,他直接用他的最优步数公式作为第三个方程,然后对abcd分别为负的16种情况进行了讨论,最终得出了能够求出最优步数和最优走法的解族。

并且做出了个网页版:无限马踏棋盘。不过有一说一,他这个网页版的操作属实逆天,左键右键的各种排列组合,移动端适配更是逆天完了,一种没被现代人机界面交互方式污染过的美。

最优步数公式后续简化

他的后续优化

最优化走法的最终解法

多亏了他的网页版,在大量的观察下,我也终于完成了我之前的最优化问题的解法。

根据我之前的说法,只需要四种步法就可以以最优走法走到目标位置。

四种步法中,一定有一种步法占主导,且恒不为负,我们称它为主导步。然后在另外三种中有一种至多走了1步,即属于[-1,1],用于修正只用3种步法可能需要绕路的情况(即我之前三元的时候没有想到的),我们称它为修正步。

如果在$0\le x\le y$举例子的话就是,a占主导,因为目标在右边靠近y轴,使用$(1,2)$的话减少的曼哈顿距离最多,所以a占主导。然后我们可以分别讨论bcd作为修正步,然后将前面的两个方程变成下面这样

或

然后用约束$a\ge0$,以及修正步属于[-1,1]可以求解最优步数。

然后这个问题显然具有对称性,对于任意x和y,可以先进行预处理,如改正负号和交换xy来变到$0\le x\le y$,然后求出abcd之后进行逆变换,得到原问题的解。

一些对应的变换

上述变换可以进行组合,如

这个解法对于[0,4]内的特例可能不适用,但是无所谓了。