# 2178번
# 문제
# N*M 크기의 배열
# (1,1) => (N,M) 까지 가야한다.
from collections import deque
dx = [-1,1,0,0]
dy = [0,0,1,-1]
N,M = map(int,input().split())
maze = [list(input()) for _ in range(N)]
visted = [[0]*M for _ in range(N)]
stack = deque()
stack.append((0,0))
visted[0][0] = 1
flag = False
while not flag:
x,y = stack.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx == N-1 and ny == M-1:
flag = True
visted[nx][ny] = visted[x][y] + 1
break
elif 0<=nx<N and 0<=ny<M:
if not visted[nx][ny] and maze[nx][ny] == '1':
visted[nx][ny] = visted[x][y] + 1
stack.append((nx,ny))
print(visted[N-1][M-1])
이 문제는 시작위치와 도착위치가 정해져있고, 최소 이동거리를 찾는것이므로, visited라는 maze와 똑같은 사이즈의 리스트를 만들어두고, 그 안에 이동거리를 저장해주었다. 그리고 도착위치에 도착하면 break를 해주었고, 그때의 flag를 바꿔주어서 상단의 while문도 빠져나갈수 있게 해주었다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] 2751 수 정렬하기 2 (0) | 2021.01.09 |
---|---|
[BOJ] 2606 바이러스 (0) | 2021.01.09 |
[BOJ] 1764 듣보잡 (0) | 2021.01.09 |
[BOJ] 1697 숨바꼭질 (0) | 2021.01.09 |
[BOJ] 1676 팩토리얼 0의 개수 (0) | 2021.01.09 |