https://www.acmicpc.net/problem/7562
7562번: 나이트의 이동
체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수
www.acmicpc.net
Problem
체스판 위에 한 나이트가 놓여져 있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까
조건
- 입력의 첫째 입력에는 테스트 케이스의 개수가 주어진다.
- 두번째 입력에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다.
- 둘째 줄과 셋째 줄에는 나이트가 현재 있는 칸, 나이트가 이동하려고 하는 칸이 주어진다.
from collections import deque
dx=(1,2,2,1,-1,-2,-2,-1)
dy=(2,1,-1,-2,-2,-1,1,2)
T=int(input())
def bfs(x,y,f_x,f_y):
dq=deque()
dq.append((x,y))
board[x][y] =1
while dq:
x,y =dq.popleft()
if x == f_x and y == f_y :
return board[x][y]-1
for k in range(8):
ny=y+dy[k]
nx=x+dx[k]
if 0<=nx<N and 0<=ny<N :
if board[nx][ny] ==0:
dq.append((nx,ny))
board[nx][ny] = board[x][y] +1
for _ in range(T):
N=int(input())
board=[[0]*N for _ in range(N)]
x1,y1 = map(int,input().split())
x2,y2 =map(int,input().split())
if x1==x2 and y1==y2:
print(0)
continue
ans=bfs(x1,y1,x2,y2)
print(ans)
'알고리즘 문제(SOL)' 카테고리의 다른 글
[백준/1697/파이썬] 숨바꼭질 (0) | 2022.01.05 |
---|---|
[백준/5014/파이썬] 스타트링크 (0) | 2022.01.03 |
[백준/7576/파이썬] 토마토 (0) | 2022.01.02 |
[백준/2206/파이썬] 벽 부수고 이동하기 (0) | 2022.01.02 |
[백준/3055/파이썬] 탈출 (0) | 2022.01.01 |