from collections import deque
dy = (1, 1, -1, -1, 2, 2, -2, -2)
dx = (2, -2, 2, -2, 1, -1, 1, -1)
N = 0
def err(ex, ey):
return 0 <= ex < N and 0 <= ey < N
for _ in range(int(input())):
N = int(input())
dq = deque()
# board = [[False for _ in range(N)] for _ in range(N)]
check_board = [[False for _ in range(N)] for _ in range(N)]
start_x, start_y = map(int, input().split())
end_x, end_y = map(int, input().split())
dq.append((start_x, start_y, 0))
# board[end_x - 1][end_y - 1] = True
check_board[start_x][start_y] = True
while dq:
x, y, d = dq.popleft()
if x == end_x and y == end_y:
print(d)
break
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
nd = d + 1
if err(nx, ny) and not check_board[nx][ny]:
check_board[nx][ny] = True
dq.append((nx, ny, nd))
BFS를 이용해 해결했다.
좌표만 1칸씩에서 나이트 이동 좌표로 변경해주고 해결했다.
'프로그램 > 코딩테스트' 카테고리의 다른 글
삼성 Expert 1244 최대 상금 (0) | 2022.06.13 |
---|---|
삼성 Expert 1208 Flatten (0) | 2022.06.13 |
백준 1743 음식물 피하기 (0) | 2022.06.13 |
백준 1987 알파벳 (0) | 2022.06.13 |
백준 2178 미로 탐색 (0) | 2022.06.13 |
댓글