python 代码
def bfs(x,y):
x,y=(x,y)
d={(x,y):0} #以字典来记录是第几次走
queue=[(x,y)] #队列来执行骑士的移动
dx=[1,1,2,2,-1,-1,-2,-2] #往8个方向走
dy=[2,-2,1,-1,2,-2,1,-1]
path[x][y] = 0 #记录此该点是否走过
while True:
x,y=queue.pop(0)#该点的骑士
counts=d[(x,y)]#在该点是由初始的第几步
if x==x1 and y==y1:
return d[(x1,y1)]#到达,输出该点的次数
for i in range(8): #8个方向
a=x+dx[i]
b=y+dy[i]
if 0<=a<n and 0<=b<n and path[a][b]==-1:#无出界且不回头
queue.append((a,b)) #骑士移动后的坐标
d[(a,b)]=counts+1 #移动后次数加一
path[a][b] = path[x][y] + 1 #记录该点已经走过
t=int(input())
for _ in range(t):
n=int(input())
x,y=map(int,input().split())
x1,y1=map(int,input().split())
path = [[-1] * 301 for _ in range(301)]
print(bfs(x,y))