백준(BOJ)
[Python/파이썬] - 백준(BOJ) 2178번 : 미로 탐색
phanre
2022. 5. 7. 19:00
https://www.acmicpc.net/problem/2178
2178번: 미로 탐색
첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.
www.acmicpc.net
간단한 BFS 문제
시작 점의 좌표를 큐에 저장한 뒤 주변 좌표를 탐색한다.
이때 조건은 좌표가 N, M을 벗어나지 않는지 && 이동할 수 있는 칸인지 && 방문한 적 없는지
이 세가지만 확인하면 된다.
세 조건을 충족한다면 큐에 넣고 visit을 1로 변경해준다
반복이 종료된다면 N, M번째 좌표를 출력해주자
import sys
from collections import deque
input = sys.stdin.readline
n, m = map(int,input().split())
arr = [list(map(int,input().strip())) for _ in range(n)]
visit = [[0 for _ in range(m)] for _ in range(n)]
dy = [0,-1,0,1]
dx = [1,0,-1,0]
queue = deque([[0,0]])
visit[0][0] = 1
while queue:
y, x = queue.popleft()
for i in range(4):
yy = y + dy[i]
xx = x + dx[i]
if 0 <= yy < n and 0 <= xx < m and arr[yy][xx] == 1 and visit[yy][xx] == 0:
visit[yy][xx] = visit[y][x] + 1
queue.append([yy,xx])
print(visit[n-1][m-1])