青训营X豆包MarsCode 技术训练营第四课 | 豆包MarsCode AI 刷题

48 阅读2分钟

国际象棋跳跃问题

问题描述

小U掌握了国际象棋中“象”和“马”的跳跃能力,在一个无限大的平面直角坐标系中,她每一步可以模仿象和马的跳跃方式移动。在每次询问中,小U需要计算从初始坐标 (x1,y1)(x1​,y1​) 到 (x2,y2)(x2​,y2​) 所需的最少步数。

  • 象的跳跃:可以移动到 (x+k,y+k)(x+k,y+k) 或 (x+k,y−k)(x+k,y−k),其中 kk 是任意整数。
  • 马的跳跃:可以移动到 (x+a,y+b)(x+a,y+b),其中 ∣a∣+∣b∣=3∣a∣+∣b∣=3 且 1≤∣a∣,∣b∣≤21≤∣a∣,∣b∣≤2。

你需要在每次询问中计算从起点到终点所需的最少步数。


测试样例

样例1:

输入:x1 = 0, y1 = 0, x2 = 1, y2 = 1
输出:1

样例2:

输入:x1 = 0, y1 = 0, x2 = 2, y2 = 1
输出:1

样例3:

输入:x1 = 0, y1 = 0, x2 = 3, y2 = 3
输出:1

样例4:

输入:x1 = -3, y1 = -2, x2 = 2, y2 = 1
输出:2

思路:

    看完题目,看起来有点像DFS找最短路径,但是和其他DFS相比,他的象的运动路径的个数不是有限的,显然直接使用DFS是不妥当的。所以,更仔细观察题目发现点2相对于点1只会出现几种特殊的情况。

    1.在y=x和y=-x上,只需1

image.png

    2. 在点1相对的日字格上(以(0,0)为例),只需一步
    

image.png

    3.在除y=x和y=-x上的需要2步象走到的,只需2

image.png

     4.在方格中间的点(方格对角线长为2)

image.png

    这里分成两种情况:
    1.中间点周围可以一步日字走到的点在y=x或y=-x上,只需2步
    2.其他情况 ,需要3步

具体代码:

image.png

image.png

运行结果:

image.png

image.png