알고리즘

[백준, 7576번] 토마토

hminor 2023. 8. 14. 10:55

 

import sys
from collections import deque
input = sys.stdin.readline
m,n = map(int,input().split())
arr = [list(map(int,input().strip('\n').split())) for _ in range(n)]
visit = [[0]*m for _ in range(n)]
q = deque([])
result = 0

# --------- bfs로 탐색하며 함께 나아가야 양측에서 방문하고
# ---------  같은 곳을 방문하지 않을 수 있기에 미리 1을 찾기 
for i in range(n):
    for j in range(m):
        if arr[i][j] == 1: 
            visit[i][j] = 1
            q.append([i,j,0])
        elif arr[i][j] == -1: visit[i][j] = 1

# --------- bfs 탐색
while q:
    x,y,cnt = q.popleft()
    if cnt > result: result = cnt
    for a,b in [[-1,0],[1,0],[0,-1],[0,1]]:
        dx,dy = x+a, y+b
        if 0<=dx<n and 0<=dy<m and not arr[dx][dy] and not visit[dx][dy]:
            q.append([dx,dy,cnt+1])
            visit[dx][dy] = 1

# --------- 아래는 방문하지 않은 곳이 있다면 -1을 출력하기 위해 탐색
flag = True # 반복문 탈출용
for i in range(n):
    for j in range(m):
        if not visit[i][j]:
            flag = False
            break
    if flag == False: break
# --------- 출력
if flag: print(result)
else: print(-1)
 
 

'알고리즘' 카테고리의 다른 글

[백준, 11724번] 연결 요소의 개수  (0) 2023.08.15
[백준, 1697번] 숨바꼭질  (0) 2023.08.15
[백준, 2667번] 단지번호붙이기  (0) 2023.08.14
[백준, 2606번] 바이러스  (0) 2023.08.13
[백준, 2178번] 미로 탐색  (0) 2023.08.13