토니의 연습장

BFS 와 그리드에서 최단 거리 (BFS_dist) 본문

Algorithm/CH 5. 응용 문제

BFS 와 그리드에서 최단 거리 (BFS_dist)

bellmake 2026. 9. 19. 11:09
from collections import deque

maps = [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]]
# maps = [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]]
n = len(maps)
m = len(maps[0])
dr = [1,-1,0,0]
dc = [0,0,1,-1]

visited = [[False]*m for _ in range(n)]
dist = [[0]*m for _ in range(n)]

def BFS_dist(start): # start = (r,c)
    r,c = start
    visited[r][c]=True
    dist[r][c]=1
    q = deque([start])
    
    while q:
        r,c = q.popleft()
        if (r,c)==(n-1,m-1):
            return dist[r][c]
        
        for i in range(4):
            nr, nc = r+dr[i], c+dc[i]
            if 0<=nr<n and 0<=nc<m and not visited[nr][nc] and maps[nr][nc]==1:
                visited[nr][nc]=True
                dist[nr][nc] = dist[r][c]+1
                q.append((nr,nc))
    
    # return 이 안된 경우 target 도착 못한 case
    return -1

print(BFS_dist((0,0)))

'Algorithm > CH 5. 응용 문제' 카테고리의 다른 글

10. 2805  (0) 2025.11.23
(중요) 14502 - 바이러스 확산  (0) 2025.11.06
정수 입력받기 참고  (0) 2025.02.22
독특한 이중 list comprehension 접근방법  (0) 2025.02.22
2. 백준 1932  (1) 2025.01.04