ποΈ Algorithm/π© λ°±μ€
π© [λ°±μ€] [Python] [BFS/DFS] 7569λ²_ν λ§ν
Dbswnstjd
2022. 11. 17. 00:58
λ¬Έμ
https://www.acmicpc.net/problem/7569
7569λ²: ν λ§ν
첫 μ€μλ μμμ ν¬κΈ°λ₯Ό λνλ΄λ λ μ μ M,Nκ³Ό μμμ¬λ €μ§λ μμμ μλ₯Ό λνλ΄λ Hκ° μ£Όμ΄μ§λ€. Mμ μμμ κ°λ‘ μΉΈμ μ, Nμ μμμ μΈλ‘ μΉΈμ μλ₯Ό λνλΈλ€. λ¨, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,
www.acmicpc.net
νμ΄
BFSλ‘ μ½κ² ν μ μμ§λ§ 3μ°¨μ λ°°μ΄μ μ¬μ©νλ€ λ³΄λ μΈλ±μ€ λΆλΆμ μ μ΄ν΄λ³΄λλ‘ νμ
# λ°±μ€ 7569λ² λ¬Έμ - ν λ§ν
from collections import deque
import sys
input = sys.stdin.readline
dx=[0,0,-1,1,0,0] # λμ΄
dy=[1,-1,0,0,0,0]
dz=[0,0,0,0,1,-1]
m,n,h = map(int, input().split())
graph = []
queue = deque()
for i in range(h):
temp = []
for j in range(n):
temp.append(list(map(int, input().split())))
for k in range(m):
if temp[j][k] == 1:
queue.append([i,j,k])
graph.append(temp)
def bfs():
while queue:
x,y,z = queue.popleft()
# i κ° λμ΄
# j κ° n
# k κ° m
for i in range(6):
nx = x + dx[i]
ny = y + dy[i]
nz = z + dz[i]
# nx : λμ΄λ₯Ό λμΌλ©΄ μλ¨
# ny : nμ λμΌλ©΄ μλ¨
# nz : mμ λμΌλ©΄ μλ¨
if 0<=nx<h and 0<=ny<n and 0<=nz<m and graph[nx][ny][nz] == 0:
graph[nx][ny][nz] = graph[x][y][z] + 1
queue.append((nx,ny,nz))
bfs()
answer = 0
for i in graph:
for j in i:
for k in j:
if k == 0:
print(-1)
exit(0)
answer = max(answer, max(j))
print(answer - 1)