Shortest path of the king
Problem
题目大意
国际象棋中,国王每步可以走到与其相邻的八个格子中。给出当前国王的位置与目标位置,求最短操作序列。
算法
将坐标相减得到dx和dy,通过正负判断起点终点的相对位置,确定国王走的方向xStep(“R”或“L”)和yStep(“U”或“D”)并将dx和dy取绝对值。
答案:
n = max{dx, dy}
路径:
(dx – dy) * xStep (dx > dy)
(dy - dx) * yStep (dx < dy)
min{dx, dy} * (xStep + yStep)
时间复杂度:
O(n)
空间复杂度:
O(n)
代码
1 s = input() 2 t = input() 3 4 x = ord(s[0]) - ord(t[0]) 5 y = ord(s[1]) - ord(t[1]) 6 7 if (x < 0): 8 xStep = "R" 9 x = -x 10 else: 11 xStep = "L" 12 if (y < 0): 13 yStep = "U" 14 y = -y 15 else: 16 yStep = "D" 17 18 print(max(x, y)) 19 while (x > y): 20 print(xStep) 21 x -= 1 22 while (x < y): 23 print(yStep) 24 y -= 1 25 while (x): 26 print(xStep + yStep) 27 x -= 1