[Python] BOJ 7569 - 토마토(BFS)

728x90
반응형

www.acmicpc.net/problem/7569

 

7569번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,

www.acmicpc.net

 

 

import sys
from collections import deque
input = sys.stdin.readline
q = deque()
M, N, H = map(int,input().split())
dx, dy, dz = [1,-1,0,0,0,0], [0,0,-1,1,0,0], [0,0,0,0,-1,1]
m = [[list(map(int,input().split())) for _ in range(N)] for _ in range(H)]
visited = [[[0 for _ in range(M)] for _ in range(N)] for _ in range(H)]
def bfs():
	while q:
		z, x, y = q.popleft()
		visited[z][x][y] = 1
		for i in range(6):
			nx, ny, nz = x + dx[i], y + dy[i], z + dz[i]
			if 0 <= nx < N and 0 <= ny < M and 0 <= nz < H and m[nz][nx][ny] == 0 and not visited[nz][nx][ny]:
				m[nz][nx][ny] = m[z][x][y] + 1
				visited[nz][nx][ny] = 1
				q.append([nz,nx,ny])
				
for i in range(N):
	for j in range(M):
		for k in range(H):
			if m[k][i][j] == 1:
				q.append([k,i,j])
bfs()
time = 0
tf = False
for i in range(N):
	for j in range(M):
		for k in range(H):
			if m[k][i][j] == 0:
				tf = True
			time = max(time, m[k][i][j])
if tf:
	print(-1)
else:
	print(time-1)
728x90
반응형
TAGS.

Comments