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 |