7569-トマト(Python、Python)
1885 ワード
💡 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))
結果は以下の通り!Reference
この問題について(7569-トマト(Python、Python)), 我々は、より多くの情報をここで見つけました https://velog.io/@jengyoung/baekjoon7569テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol