백준 문제 링크
주난의 난(難)
- 오랜만에 BFS를 사용했다.
- 기본 BFS 소스코드를 전개하는데
살짝 다른 점은 다음 좌표가
- 0일 경우 appendleft 해서 먼저 탐색하게 만든다.
answer[nx][ny] = answer[x][y]- 1 or #일 경우 append
answer[nx][ny] = answer[x][y] + 1
- 주난이의 위치로 bfs 함수를 실행시키고,
answer에서 범인의 좌표를 출력하면 끝!
from collections import deque
n, m = map(int, input().split())
graph = []
x1, y1, x2, y2 = map(int, input().split())
for _ in range(n):
graph.append(list(input()))
visited = [[False] * m for _ in range(n)]
answer = [[0] * m for _ in range(n)]
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
def bfs(x, y):
queue = deque()
queue.append((x,y))
visited[x][y] = True
answer[x][y] = 0
while queue:
x, y = queue.popleft()
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
if (0 <= nx < n) and (0 <= ny < m) and not visited[nx][ny]:
visited[nx][ny] = True
if graph[nx][ny] == '0':
queue.appendleft((nx,ny))
answer[nx][ny] = answer[x][y]
else:
queue.append((nx,ny))
answer[nx][ny] = answer[x][y] + 1
bfs(x1-1, y1-1)
print(answer[x2-1][y2-1])