BFS 기본예제임
이전에 올렸던 BFS 알고리즘 포스팅 내용을 참고하면 좋을 것 같다.
BFS는 경로탐색시 가장 적은 개수의 간선을 가지는 방향을 우선적으로 탐색하게 된다. 미로탐색 문제의 경우 인접한 노드간의 거리가 일정하기 때문에 간선이 최소로 목적지에 도착하는 경로가 최단경로가 된다.
#BFS
from collections import deque
N,M=map(int,input().split())
miro=[]
miro=[list(map(int,input())) for _ in range(N)]
dx=[-1,1,0,0]
dy=[0,0,-1,1]
def bfs(x,y):
queue=deque([[x,y]])
# queue.append([x,y])
while queue:
x,y=queue.popleft()
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if not (nx<0 or ny<0 or nx>N-1 or ny>M-1 or miro[x][y]==0):
if miro[nx][ny]==1:
miro[nx][ny]=miro[x][y]+1
queue.append((nx,ny))
return miro[N-1][M-1]
print(bfs(0,0))
https://www.acmicpc.net/problem/2178
#관련 포스팅
'자료구조 알고리즘 > 알고리즘' 카테고리의 다른 글
백준 3055 탈출 파이썬 BFS 풀이 (0) | 2021.08.25 |
---|---|
백준 동전 2294 BFS 파이썬 문제풀이 (0) | 2021.08.25 |
[파이썬] 백준 11725 트리의 부모찾기 ( BFS, DFS 3가지 풀이 비교) (0) | 2021.08.25 |
DFS / BFS 알고리즘과 예제풀이 ( 백준 바이러스, BFS 와 BFS 파이썬 ) (0) | 2021.08.25 |
그래프 기본 개념 정리 (0) | 2021.08.25 |