ํ์ด
์ญ์๋ BFS ๋ฌธ์ ์ด๋ค. ํ์ง๋ง ์ด๋ฒ์ ์์์ ์ด ์ฌ๋ฌ๊ฐ์ธ ํ์์ ํด์ผํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๊ตฌํ๋ค.
๋จผ์ ์ ๋ ฅ์ผ๋ก ์ ๋ณด๋ฅผ ๋ฐ์ ๋ค ์ต์ด์๋ ํ ๋งํ ์ ์ขํ๋ฅผ ํ์ ์ง์ด๋ฃ์ด๋๋ค.
์ดํ BFS ๋ฅผ ์คํํ์ฌ ์ต์ด์๋ ํ ๋งํ ์ ์ธ์ ํ ์ต์ง ์์ ํ ๋งํ ๋ค์ ์ฐพ์ ๋ค ์ฒ์ ์ต์ด์๋ ํ ๋งํ ๋ 1 ๋ก ์ ์ฅ๋์ด ์์ผ๋ ๋ฐ๋ก ์ธ์ ํ ํ ๋งํ ๋ค์ +1 ํ์ฌ ์ ์ฅํด์ค๋ค. ์ด ๊ณผ์ ์ BFS ๊ฐ ๋๋ ๋ ๊น์ง ๋ฐ๋ณตํ๋ค.
์ดํ BFS ๊ฐ ์ข ๋ฃ๋ ์ํ์์์ 2์ฐจ์ ๋ฐฐ์ด์ ์ํํ๋ฉด์ ์ถ๋ ฅ์กฐ๊ฑด์ ๋ง์ถฐ์,
์ต์ง์์ ํ ๋งํ ๊ฐ ์์ ๊ฒฝ์ฐ -1 ์,
์ด๋ฏธ ๋ค ์ต์ด ์์ ๊ฒฝ์ฐ 0 ์,
์๋๋ผ๋ฉด ๊ฐ์ฅ ๋์ ์ซ์์์ -1 ์ ํ ๊ฐ์ ์ถ๋ ฅํด์ฃผ๋ฉด๋๋ค.
์์ค์ฝ๋
# ํ ๋งํ
from collections import deque
import sys
input = sys.stdin.readline
def bfs():
while q:
x, y = q.popleft()
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if 0 <= nx < n and 0 <= ny < m and graph[nx][ny] == 0: # ๋ฒ์ ๋ด ์ด๋ฉด์ ์ต์ง ์์์ ๊ฒฝ์ฐ
q.append([nx, ny])
graph[nx][ny] = graph[x][y] + 1 # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ๊ฒธ ์ผ์ ๊ณ์ฐ
return
dx = [1, -1, 0, 0]
dy = [0, 0, -1, 1]
m, n = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(n)]
q = deque()
for i in range(n):
for j in range(m):
if graph[i][j] == 1:
q.append([i, j]) # ์ด๋ฏธ ์ต์ด์๋ ํ ๋งํ ๋ค์ ํ์ ์ฝ์
bfs() # BFS ์คํ
allRipe = True
ans = 0
for i in range(n):
for j in range(m):
if graph[i][j] == 0:
allRipe = False
break
ans = max(ans, graph[i][j])
if allRipe == False:
print(-1)
elif ans == 1:
print(0)
else:
print(ans - 1)