solution
1. dx = [-2, -2, -1, -1, 1, 1, 2, 2], dy = [1, -1, 2, -2, 2, -2, 1, -1]
2. deque 이용
# 7562, 나이트의 이동
import sys
from collections import deque
dx = [-2, -2, -1, -1, 1, 1, 2, 2]
dy = [1, -1, 2, -2, 2, -2, 1, -1]
def bfs(x, y):
q.append((x, y))
visited[x][y] = 1
while q:
x3, y3 = q.popleft()
if x3 == x2 and y3 == y2:
return visited[x3][y3]-1
for i in range(8):
nx = x3 + dx[i]
ny = y3 + dy[i]
if 0 <= nx < l and 0 <= ny < l:
if visited[nx][ny] == 0:
visited[nx][ny] = visited[x3][y3] + 1
q.append((nx, ny))
# 테스트 케이스 개수
T = int(sys.stdin.readline())
for _ in range(T):
l = int(sys.stdin.readline()) # 체스판 한 변의 길이
visited = [[0]*l for _ in range(l)]
x1, y1 = map(int, sys.stdin.readline().split()) # 출발 위치
x2, y2 = map(int, sys.stdin.readline().split()) # 도착 위치
q = deque()
print(bfs(x1, y1))
32920KB
2848ms
문제 출처 https://www.acmicpc.net/problem/7562
'알고리즘 > DFS | BFS' 카테고리의 다른 글
파이썬 | 백준 | 2644 | 촌수계산 (0) | 2020.08.31 |
---|---|
파이썬 | 백준 | 5567 | 결혼식 (0) | 2020.08.28 |
파이썬 | 백준 | 2468 | 안전 영역 (0) | 2020.08.18 |
파이썬 | 백준 | 6603 | 로또 | 조합(combinations) (0) | 2020.08.14 |
백준 | 파이썬 | 1012 | 유기농 배추 | sys.setrecursionlimit(50000) (0) | 2020.08.10 |