Algorithm/boj

[파이썬] 7576 토마토

takeU 2022. 4. 5. 11:55
반응형
from collections import deque

n, m = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(m)]
check = [[0] * n for _ in range(m)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
q = deque()
ans = 0

for i in range(m):
    for j in range(n):
        if board[i][j] == 1:
            q.append([i, j, 0])

while q:
    x, y, count = q.popleft()
    ans = max(ans, count)
    for i in range(4):
        nx, ny = x + dx[i], y + dy[i]
        if 0 <= nx < m and 0 <= ny < n:
            if board[nx][ny] == 0 and check[nx][ny] == 0:
                q.append([nx, ny, count + 1])
                board[nx][ny] = 1

flag = 0
for i in range(m):
    for j in range(n):
        if board[i][j] == 0:
            flag = 1
            break
print(-1 if flag else ans)

bfs