문제.
풀이.
BFS를 해서 문제를 풀면된다.
나이트의 이동 범위만 잘 정해서 하면되는데
Y축으로 2칸 올라갈때는 X축이 -1, +1 만큼 움직이고
Y축으로 1칸 올라갈떄는 X축이 -2, +2 만큼 움직인다
소스코드.
import sys
from collections import deque
def BFS(matrix, start, end):
if start == end:
return 1
queue = deque()
queue.append([start[0], start[1]])
while queue:
x, y = queue.popleft()
for i in range(8):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < height and 0 <= ny < height:
if matrix[nx][ny] == 0:
matrix[nx][ny] = matrix[x][y] + 1
queue.append([nx, ny])
if nx == end[0] and ny == end[1]:
return matrix[nx][ny]
dx = [2, 1, 2, 1, -2, -1, -2, -1]
dy = [1, 2, -1, -2, 1, 2, -1, -2]
tc = int(sys.stdin.readline())
for i in range(tc):
height = int(sys.stdin.readline())
matrix = [[0 for i in range(height)] for j in range(height)]
start = list(map(int, sys.stdin.readline().split()))
matrix[start[0]][start[1]] = 1
end = list(map(int, sys.stdin.readline().split()))
print(BFS(matrix, start, end) - 1)
'프로그래밍 > 백준' 카테고리의 다른 글
백준 1753 최단경로 - 파이썬 (0) | 2021.07.23 |
---|---|
백준 1707 이분그래프 - 파이썬 (0) | 2021.07.22 |
백준 1697 숨바꼭질 - 파이썬 (0) | 2021.07.21 |
백준 7569 토마토 - 파이썬 (0) | 2021.07.21 |
백준 7576 토마토 - 파이썬 (0) | 2021.07.21 |