이번 문제는 BFS를 통해 해결하였다. BFS 안에서 나이트의 이동을 구현하기 위해 나이트의 이동 정보를 리스트에 짝지어 담아 모든 경우를 순회하도록 하였다. 그리고 BFS 안에서 목적지에 도달하면 현재까지의 누적 이동 횟수를 출력하고 반복문을 탈출하도록 하였다.
import collections
t=int(input())
for _ in range(t):
l=int(input())
f_y, f_x=map(int, input().split())
t_y, t_x=map(int, input().split())
dy=[2, 2, -2, -2, 1, 1, -1, -1]
dx=[-1, 1, 1, -1, 2, -2, 2, -2]
visited=[[False]*l for _ in range(l)]
visited[f_y][f_x]=True
q=collections.deque()
q.append((0, f_y, f_x))
while q:
cnt, y, x=q.popleft()
if y==t_y and x==t_x:
print(cnt)
break
for i in range(8):
ny=y+dy[i]
nx=x+dx[i]
nxt_cnt=cnt+1
if 0<=ny<l and 0<=nx<l and not visited[ny][nx]:
visited[ny][nx]=True
q.append((nxt_cnt, ny, nx))