https://www.acmicpc.net/problem/14497
풀이
BFS를 토대로 문제를 풀어주었습니다. 주난이가 움직이지않고 제자리에서 파동을 보내서 초코바를 훔쳐간 범인을 찾기에 파동의 움직임을 구현해주시면 됩니다. 항상 파동이 전달 될 수 있는 "0"부터 방문할 수 있게 .appendlef()를 사용하여서 학생이 없는 자리인 "1"과 학생이 있는 자리인 1과 구분하여 방문 할 수 있게 코딩해주시면 됩니다.
코드
# 14497번 주난의 난(難)
from collections import deque
import sys
def bfs(s_x, s_y):
dxys = ((0,1), (0,-1), (1,0), (-1,0))
queue = deque([[s_x, s_y]])
visited[s_y][s_x] = 0
while queue:
c_x, c_y = queue.popleft()
for dx, dy in dxys:
n_x = c_x + dx
n_y = c_y + dy
if 0 <= n_x < M and 0 <= n_y < N and visited[n_y][n_x] == -1:
if grid[n_y][n_x] == "1" or grid[n_y][n_x] == "#":
visited[n_y][n_x] = visited[c_y][c_x] + 1
queue.append([n_x, n_y])
else:
visited[n_y][n_x] = visited[c_y][c_x]
queue.appendleft([n_x, n_y]) # appendleft()를 통해서 방문할 수 있는 0부터 방문할 수 있게 deque에 넣어줍니다.
N, M = map(int, sys.stdin.readline().split())
y1, x1, y2, x2 = map(int, sys.stdin.readline().split())
grid = [list(sys.stdin.readline().rstrip()) for _ in range(N)]
visited = [[-1 for _ in range(M)] for _ in range(N)]
bfs(x1-1, y1-1)
print(visited[y2-1][x2-1])
출력결과
'백준 > DFS&BFS' 카테고리의 다른 글
[백준][Python] 16953번 A → B - 코팩 (1) | 2023.03.20 |
---|---|
[백준][Python] 17141번 연구소 2 - 코팩 (0) | 2023.03.13 |
[백준][Python] 24445번 알고리즘 수업 - 너비 우선 탐색 2 - 코팩 (0) | 2023.03.06 |
[백준][Python] 1926번 그림 - 코팩 (0) | 2023.03.05 |
[백준][Python] 24444번 알고리즘 수업 - 너비 우선 탐색 1 - 코팩 (0) | 2022.11.08 |