题目分析
很明显的bfs,只不过三维
经验总结
没什么难点,只有一点需要注意:6个方向直接写出,开始时没搞清直接用了个for循环12个方向(肯定包括斜线了),结果样例是9步【看见部署还少了其实就该想到方向问题】
依旧强调一下语法:
g=[[[] for i in range(r)] for j in range(l)] #空行可添加
st=[[[False for i in range(c)] for j in range(r)] for k in range(l)] #空值可赋值
Python3 代码
from collections import deque
while 1:
l,r,c=map(int,input().split())
if l==0 and r==0 and c==0:
break
g=[[[] for i in range(r)] for j in range(l)] #声明
st=[[[False for i in range(c)] for j in range(r)] for k in range(l)]
for i in range(l):
for j in range(r):
g[i][j]=list(input())
input()
#print(g)
q=deque()
dis={}
for i in range(l):
for j in range(r):
for k in range(c):
if g[i][j][k]=='S':
st[i][j][k]=True
q.append((i,j,k))
dis[(i,j,k)]=0
if g[i][j][k]=='#':
st[i][j][k]=True
if g[i][j][k]=='E':
end=(i,j,k)
dx = [0, 0, 0, 0, 1, -1]
dy = [0, 0, 1, -1, 0, 0]
dz = [1, -1, 0, 0, 0, 0]
flag=0
while q:
t=q.popleft()
for i in range(6):
nz=t[0]+dz[i]
nx=t[1]+dx[i]
ny=t[2]+dy[i]
if 0<=nz<=l-1 and 0<=nx<=r-1 and 0<=ny<=c-1 and st[nz][nx][ny]==False:
if (nz,nx,ny)==end:
print(f'Escaped in {dis[t]+1} minute(s).')
q.clear()
flag=1
break
st[nz][nx][ny]=True
dis[(nz,nx,ny)]=dis[t]+1
q.append((nz,nx,ny))
#print(nz,nx,ny)
if flag==0:
print("Trapped!")