728x90
https://www.acmicpc.net/problem/2178
# 조건
- NxM 크기의 배열로 표현되는 미로
- 1은 이동할 수 있는 칸, 0은 이동할 수 없는 칸
- (1,1) 에서 출발하여 (N,M)의 위치로 이동할 때 지나야 하는 최소 칸 수를 출력
# 접근 방법
- BFS를 통하여 탐색을 진행한다.
- Queue에 넣어주며 방문기록을 현재 좌표+1로 해준다.
- 간선의 가중치가 모두 같은 그래프로 생각할 수 있기 때문에 bfs를 이용한다면 최단 경로를 바로 구할 수 있다.
import sys
sys.setrecursionlimit(10**6)
sys.stdin = open('input.txt')
from collections import deque
# 시작 위치
def bfs(x,y):
global visited
q = deque()
q.append((x,y))
visited[x][y] = 1
while q:
sti, stj = q.popleft()
for i in range(4):
# 탐색 가능한 길 찾아주며 이동 칸 수 기록해주기
ni, nj = di[i] + sti, dj[i] + stj
if 0<=ni<N and 0<=nj<M and visited[ni][nj] == 0 and maze[ni][nj] == '1':
visited[ni][nj] = visited[sti][stj] +1
q.append((ni,nj))
N, M = map(int, input().split())
maze = [list(input()) for _ in range(N)]
# 탐색 델타 함수
# 상하좌우
di, dj = [-1,1,0,0],[0,0,-1,1]
visited = [[0]*M for _ in range(N)]
bfs(0,0)
print(visited[N-1][M-1])
728x90
'ALGORITHM > DFS, BFS, 그래프 탐색' 카테고리의 다른 글
[백준 11403번] 파이썬 - 경로 찾기 (0) | 2022.10.21 |
---|---|
[백준 2667번] 파이썬 - 단지 번호 붙이기 (0) | 2022.10.11 |
[백준 11724번] 연결 요소의 개수 (1) | 2022.10.08 |
[백준 1697] 파이썬 - 숨바꼭질 (0) | 2022.10.05 |
[백준 1389번] 파이썬 - 케빈 베이컨의 6단계 법칙 (0) | 2022.10.01 |