코드
# 가중치 없는 최단거리 -> bfs
import sys
from collections import deque
input = sys.stdin.readline
n, m = map(int, input().split())
dx, dy = (1,-1,0,0), (0,0,1,-1) # 상하좌우 이동
graph = [[*map(int, input().split())] for _ in range(n)]
visited = [[0]*m for _ in range(n)] # 방문기록
def bfs(i,j):
queue = deque([(i,j)])
while queue:
px,py = queue.popleft()
for i in range(4):
nx = px + dx[i]
ny = py + dy[i]
if 0<=nx<n and 0<=ny<m and not visited[nx][ny] and graph[nx][ny]==1:
visited[nx][ny] = visited[px][py]+1
queue.append((nx,ny))
for i in range(n):
for j in range(m):
if graph[i][j] == 2:
bfs(i,j)
break
for i in range(n): # 갈 수 있는 땅이지만 벽을 이유로 못가는 곳
for j in range(m):
if graph[i][j] == 1 and not visited[i][j]: visited[i][j] = -1
for i in range(n):
print(*visited[i], end='\n')
전형적인 bfs 문제
'백준' 카테고리의 다른 글
[백준] 2611번 자동차경주 파이썬 코드 (1) | 2024.01.28 |
---|---|
[백준] 20040번 사이클 게임 파이썬 코드 (1) | 2024.01.25 |
[백준] 8879번 올림픽 파이썬 코드 (0) | 2024.01.25 |
[백준] 2292번 벌집 파이썬 코드 (0) | 2024.01.25 |
[백준] 10431번 줄세우기 파이썬 코드 (0) | 2024.01.24 |