문제 링크
https://www.acmicpc.net/problem/7562
7562번: 나이트의 이동
체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수
www.acmicpc.net
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
import sys
from collections import deque
input = sys.stdin.readline
dx = [-2,-1,1,2,2,1,-1,-2]
dy = [1,2,2,1,-1,-2,-2,-1]
n = int(input())
def bfs(l, a,b,c,d):
map = [[-1] * l for _ in range(l)]
map[a][b] = 0
dq = deque()
dq.append((a,b))
while dq:
x,y = dq.popleft()
if x == c and y == d: #나이트가 이동하려는 칸과 일치 (도착)
break
for i in range(8): #나이트가 한번에 이동할 수 있는 step
nx = x+dx[i]
ny = y+dy[i]
if 0<=nx<l and 0<=ny<l and map[nx][ny]==-1: #새 좌표가 체스판 내에 포함 & 아직 방문X
map[nx][ny]=map[x][y]+1
dq.append((nx,ny))
return map[c][d]
for _ in range(n):
l = int(input())
a, b = map(int, input().split())
c, d = map(int, input().split())
ans = bfs(l,a,b,c,d)
print(ans)
|
cs |
POINT
- BFS 알고리즘을 사용하여 최단 거리를 계산한다.
- 이전 방문 횟수에 1씩 더해가면서 각 좌표까지의 방문 횟수를 기록한다.
- 목표 좌표에 도달하면 bfs탐색을 끝낸다.
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준]13549 숨바꼭질3 파이썬 python (0) | 2022.01.14 |
---|---|
[백준]14226번 이모티콘 파이썬 python (0) | 2022.01.14 |
다익스트라 알고리즘 (0) | 2022.01.13 |
[백준]13913 숨바꼭질4 파이썬 python (0) | 2022.01.13 |
[백준]1697번 숨바꼭질 파이썬 python (0) | 2022.01.13 |