from queue import PriorityQueue
import sys
def Dijkstra(G,sp):
INF=float("inf")
dist=[INF]
prev=[0]
Q=set()
que=PriorityQueue()
for i in range(1,len(G)):
if i==sp:
dist.append(0)
else:
dist.append(INF)
prev.append(0)
Q.add(i)
que.put((dist[i],i))
while Q!=set():
while True:
temp_u=que.get()[1]
if temp_u in Q:
u=temp_u
break
Q.remove(u)
for i in range(1,len(G[u])+1):
alt=dist[u]+G[u][i-1][1]
if alt<dist[G[u][i-1][0]]:
dist[G[u][i-1][0]]=alt
prev[G[u][i-1][0]]=u
que.put((alt,G[u][i-1][0]))
return dist,prev
l,m,n=map(int, sys.stdin.readline().rstrip().split())
while (l,m,n)!=(0,0,0):
v=l*m*n
G=[[] for _ in range(v+1)]
M=[0]*l
MP=[0]*l
for i in range(l):
M[i]=[sys.stdin.readline().rstrip() for _ in range(m)]
MP[i]=[" " for _ in range(m)]
sys.stdin.readline()
INF=float("inf")
for i in range(l):
for j in range(m):
a=[]
for k in range(n):
#print(i,j,k,M[i][j])
if M[i][j][k]=='.':
a.append(1)
if M[i][j][k]=='#':
a.append(INF)
if M[i][j][k]=='S':
a.append(1)
sp=(i+1,j+1,k+1)
if M[i][j][k]=='E':
a.append(1)
ep=(i+1,j+1,k+1)
MP[i][j]=a
G=[[] for _ in range(v+1)]
for i in range(l):
for j in range(m):
for k in range(n):
if k+1<=n-1:
G[i*m*n+j*n+k+1].append((i*m*n+j*n+k+1+1,MP[i][j][k+1]))
if k-1>=0:
G[i*m*n+j*n+k+1].append((i*m*n+j*n+k+1-1,MP[i][j][k-1]))
if j+1<=m-1:
G[i*m*n+j*n+k+1].append((i*m*n+j*n+k+1+n,MP[i][j+1][k]))
if j-1>=0:
G[i*m*n+j*n+k+1].append((i*m*n+j*n+k+1-n,MP[i][j-1][k]))
if i+1<=l-1:
G[i*m*n+j*n+k+1].append((i*m*n+j*n+k+1+m*n,MP[i+1][j][k]))
if i-1>=0:
G[i*m*n+j*n+k+1].append((i*m*n+j*n+k+1-m*n,MP[i-1][j][k]))
sp=(sp[0]-1)*m*n+(sp[1]-1)*n+(sp[2]-1)+1
ep=(ep[0]-1)*m*n+(ep[1]-1)*n+(ep[2]-1)+1
ans=Dijkstra(G,sp)[0][ep]
if ans print("Escaped in %d minute(s)." % (ans))
else :
print("Trapped!")
l,m,n=map(int, sys.stdin.readline().rstrip().split())
'백준(BOJ) 풀이' 카테고리의 다른 글
[백준 9095] 1,2,3더하기 (0) | 2019.11.13 |
---|---|
[백준 11726] 2*n 타일링 (0) | 2019.11.13 |
[백준 4485] 녹색 옷 입은 애가 젤다지? (0) | 2019.11.12 |
[백준 1261] 알고스팟 (0) | 2019.11.12 |
[백준 1504] 특정한 최단 경로 (0) | 2019.11.12 |