알고리즘/baekjoon
[알고리즘/baekjoon] 2178_미로 탐색(python)
천뿌니
2021. 11. 26. 16:26
728x90
문제
https://www.acmicpc.net/problem/2178
2178번: 미로 탐색
첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.
www.acmicpc.net
# 1012 유기농 배추와 매우 유사한 문제이다. 인접하다는 것은 상하좌우를 고려한다는 의미
정답
from collections import deque
n, m = map(int, input().split())
miro = [list(map(int,input())) for _ in range(n)]
visited = [[0]*m for _ in range(n)]
dx = [-1, 1, 0 ,0] # 좌,우
dy = [0, 0, -1, 1] # 상,하
def bfs(x,y):
q = deque()
q.append((x,y))
visited[x][y] = 1 # 0,0부터 시작
while q:
a, b = q.popleft()
if a == n-1 and b == m-1: # 0부터 시작하기 때문에 목표는 n-1과 m-1까지
print(visited[a][b])
return
for i in range(4): # 인접한 부분 찾기
na = a+dx[i]
nb = b+dy[i]
if 0<=na<n and 0<=nb<m: # 0부터 m-1까지
if visited[na][nb] == 0 and miro[na][nb] == 1: # 방문하지 않았고, 방문해야 하는 곳일때
visited[na][nb] = visited[a][b] + 1 # 이동해야 할 칸 수 +1
q.append((na,nb))
bfs(0,0)