본문 바로가기
Algorithm(CodeTree, Python)/BFS

[코드트리] 나이트 Python

by kurooru 2023. 3. 1.
# n 입력
n = int(input())
# sx, sy, ex, ey 입력
sx, sy, ex, ey = map(int, input().split())
sx, sy, ex, ey = sx - 1, sy - 1, ex - 1, ey - 1

# in_range
def in_range(x, y):
    return 0 <= x < n and 0 <= y < n

# can_move
def can_move(x, y):
    # 범위 내에 있고, 방문한 적 없으면 가능
    return in_range(x, y) and not visited[x][y]

# bfs()
def bfs():
    while q:
        x, y = q.popleft()
        dxs, dys = [-1, -2, -2, -1, 1, 2, 2, 1], [-2, -1, 1, 2, 2, 1, -1, -2]
        for dx, dy in zip(dxs, dys):
            nx, ny = x + dx, y + dy
            # 갈 수 있으면
            if can_move(nx, ny):
                # 방문 처리하고
                visited[nx][ny] = visited[x][y] + 1
                # 큐에 넣어주기
                q.append((nx, ny))

# 설계
grid = [
    [0] * n
    for _ in range(n)
]

# visited
visited = [
    [0] * n
    for _ in range(n)
]

# 큐 사용준비
from collections import deque
q = deque()

# 큐에 넣어주고
q.append((sx, sy))
# 방문 처리하고
visited[sx][sy] = 1
# bfs()
bfs()

# 방문했으면
if visited[ex][ey]:
    print(visited[ex][ey] - 1)
# 방문 못했으면
else:
    print(-1)