Algorithm/λ°±μ€
[λ°±μ€] 7576 ν λ§ν (νμ΄μ¬/python)
chjcoder
2023. 8. 2. 22:38
πλ¬Έμ
https://www.acmicpc.net/problem/7569
πμ΄λ€ μκ³ λ¦¬μ¦?
1. μΈμ ν ν λ§ν κ° μ΅κ² λ§λλ―λ‘ bfsλ₯Ό μ¬μ©ν΄μΌκ² λ€κ³ νλ¨ν¨
2. μμμ μ΄ μ¬λ¬κ°μΈ bfs λ¬Έμ μ κ²½μ°, μμμ μ λͺ¨λ νμ λ£κ³ bfsλ₯Ό λ리λ κ²μ΄ ν΅μ¬μ΄λ€.
π»μ½λ
# 7576 ν λ§ν
from collections import deque
def bfs():
# μνμ’μ° μ’ν μ€μ
dx = [0,0,-1,1]
dy = [1,-1,0,0]
while deq:
x,y = deq.popleft() # νμμ μ΅μ ν λ§ν μ’ν κΊΌλ΄κΈ°
for i in range(4): # μνμ’μ° νμ μμ
nx = x + dx[i]
ny = y + dy[i]
# graph λ²μ΄λ μ’νλ 무μ
if nx < 0 or nx > (n-1) or ny < 0 or ny > (m-1):
continue
if graph[nx][ny] == 0: # μμ΅μ ν λ§ν λ°κ²¬
graph[nx][ny] = graph[x][y] + 1 # λ μ§+1
deq.append([nx,ny])
# n: μΈλ‘(x), m: κ°λ‘(y)
m,n = map(int,input().split())
#graph
graph = []
for i in range(n):
graph.append(list(map(int,input().split())))
deq = deque() # ν μ€μ
# νμ μμ
for i in range(n):
for j in range(m):
if graph[i][j] == 1:
deq.append([i,j])
# bfsλλ €μ ν λ§ν μ΅νκΈ°
bfs()
# μ΅μ§ λͺ»νλ ν λ§ν νμΈ λ° κ±Έλ¦¬λ λ μ§ νμΈ
all_ripe = True # ν λ§ν κ° λͺ¨λ μ΅μλμ§ νμΈν λ³μ
day = 0 # ν λ§ν κ° λͺ¨λ μ΅μ λκΉμ§μ μ΅μ λ μ§
for i in range(n):
for j in range(m):
if graph[i][j] == 0: # μμ§ μμ΅μ ν λ§ν κ° μ‘΄μ¬νλ©΄
all_ripe = False
print(-1)
break
day = max(day,graph[i][j])
if not all_ripe:
break
if all_ripe: # ν λ§ν λͺ¨λ μ΅μμΌλ©΄
print(day-1)