標準7569|トマト(BFS、3 Dアレイ)
問題のソース:https://www.acmicpc.net/problem/7569
質問する
熟したトマトの影響で熟成する.
入力
しゅつりょく
問題の処理方法
プロセス
3 Dリスト索引
리스트 [ 높이인덱스 ] [ 세로인덱스 ] [ 가로인덱스 ] = 값
の形式で呼び出す.for h in height:
for r in row:
for c in column:
array[h][r][c] = 1
3d_array = [[[0 for _ in range(column)] for _ in range(row)] for _ in range(depth)]
コード#コード#
import sys
from collections import deque
input = sys.stdin.readline
m, n, h = map(int, input().split())
# 3차원 토마토 정보 저장
tomatoes = [[list(map(int, input().split())) for _ in range(n)] for _ in range(h)]
queue = deque()
for i in range(h):
for j in range(n):
for k in range(m):
# 높이(h), 가로(x), 세로(y) 순
if tomatoes[i][j][k] == 1:
queue.append((i, j, k))
# x축, y축, z축 3차원 이동을 위한 방향 변수 설정
dx = [1, -1, 0, 0, 0, 0]
dy = [0, 0, 1, -1, 0, 0]
dz = [0, 0, 0, 0, 1, -1]
def bfs():
while queue:
z, x, y = queue.popleft()
for i in range(6):
nx = x + dx[i]
ny = y + dy[i]
nz = z + dz[i]
if 0 <= nx < n and 0 <= ny < m and 0 <= nz < h:
if tomatoes[nz][nx][ny] == 0:
tomatoes[nz][nx][ny] = tomatoes[z][x][y] + 1
queue.append((nz, nx, ny))
bfs()
flag = False
answer = -1
for i in range(h):
for j in range(n):
for k in range(m):
if tomatoes[i][j][k] == 0:
flag = True
answer = max(answer, tomatoes[i][j][k])
# BFS 탐색으로 익은 토마토의 인접한 안 익은 토마토들에 대해 익게 만들었지만
# 만약 안익은 토마토( 0 ) 이 존재하면 -1을 출력하고 다 익었다면 제일 큰 값에 -1을 해준 값을 출력한다.
if flag:
answer = -1
elif answer == 1:
answer = 0
else:
answer -= 1
print(answer)
Reference
この問題について(標準7569|トマト(BFS、3 Dアレイ)), 我々は、より多くの情報をここで見つけました https://velog.io/@whddn0221/백준-7569-토마토-BFS-3차원-배열テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol