国际象棋跳跃问题
问题描述
小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步
2. 在点1相对的日字格上(以(0,0)为例),只需一步
3.在除y=x和y=-x上的需要2步象走到的,只需2步
4.在方格中间的点(方格对角线长为2)
这里分成两种情况:
1.中间点周围可以一步日字走到的点在y=x或y=-x上,只需2步
2.其他情况 ,需要3步
具体代码: