7569-トマト(Python、Python)


💡 Review


同じトマトで、今回は3次元です.
問題ないです.
ただ、三次元配列が見慣れていないので、h,x,yがうまく配置されていないので、ずっとエラーが発生しています.
△原因が分かったとき、かなり気まずい思いと虚しさがあった....
草の作り方はトマトの時と同じで、省略!
(高さに応じてrange(2)と同様の方法を追加するだけです.)
確かに基礎段階から解き始めた.
原理を理解するスピードも速くなり、
私はリラックスのスピードが速くなったことを感じることができて、気持ちはとても良いです:)

💡 Code

from collections import deque
import sys
def bfs(q, cnt = 0):
    dh, dx, dy = [1,-1], [0, 0, 1, -1], [1, -1, 0, 0]
    while q:
        cnt += 1
        for _ in range(len(q)):
            h, x, y = q.popleft()
            for j in range(4):
                nx, ny = x + dx[j], y + dy[j]
                if nx >= N or nx < 0 or ny >= M or ny < 0:
                    continue
                if arr[h][nx][ny] == 0:
                    arr[h][nx][ny] = 1
                    q.append((h, nx, ny))
            for i in range(2):
                nh = h + dh[i]
                if nh >= H or nh < 0:
                    continue
                if arr[nh][x][y] == 0:
                    arr[nh][x][y] = 1
                    q.append((nh, x, y))
    if check(arr):
        return cnt - 1
    else:
        return -1

def check(arr):
    for i in range(H):
        for j in range(N):
            for k in range(M):
                if arr[i][j][k] == 0:
                    return False
                    break
    return 1

if __name__ == "__main__":
    input = sys.stdin.readline
    M, N, H = map(int,input().split())
    q = deque([])
    arr = [[] for _ in range(H)]

    for i in range(H):
        for j in range(N):
            arr[i].append(list(map(int,input().split())))
            for k in range(M):
                if arr[i][j][k] == 1:
                    q.append((i,j,k))
    print(bfs(q))
結果は以下の通り!