Description
你進入了一個3D的寶藏地宮中探尋到了寶藏,你可以找到走出地宮的路帶出寶藏,或者使用爐石空手回家。
地宮由立方體單位構成,立方體中不定會充滿巖石。向上、下、前、后、左、右移動一個單位需要一分鐘。你不能對角線移動并且地宮四周堅石環繞。
請問你是否可以走出地宮帶出寶藏?如果存在,則需要多少時間?
Input
地宮描述的第一行為L,R和C(皆不超過3030)。
L表示地宮的層數。
R和C分別表示每層地宮的行與列的大小。
隨后L層地宮,每層R行,每行C個字符。
每個字符表示地宮的一個單元。'#'表示巖石單元,′.′′.′表示空白單元。你的起始位置在′S′,出口為′E′。
Output
如果可以帶出寶藏,則輸出Escaped in x minute(s).
x為最短脫離時間。
如果無法帶出,則輸出Trapped!
Sample Input 1?
3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E
Sample Output 1
Escaped in 11 minute(s).
Sample Input 2?
1 3 3 S## #E# ###
Sample Output 2
Trapped!
AC:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
using namespace std;
int q[10005][55],r,c,l,as,asd,asdf;
char a[55][55][55];
int fx[6]={1,-1,0,0,0,0};
int fy[6]={0,0,1,-1,0,0};
int fz[6]={0,0,0,0,1,-1};
bool v[50][50][50],f;
void bfs(){int head=0;int tail=1;while(head<tail){head++;for(int i=0;i<6;i++){int xx=q[head][1]+fx[i];int yy=q[head][2]+fy[i];int zz=q[head][3]+fz[i];if(xx>=1&&xx<=l&&yy>=1&&yy<=r&&zz<=c&&zz>=1&&v[xx][yy][zz]==false&&a[xx][yy][zz]!='#'){v[xx][yy][zz]=true;tail++;q[tail][1]=xx;q[tail][2]=yy;q[tail][3]=zz;q[tail][4]=q[head][4]+1;if(xx==as&&yy==asd&&zz==asdf){cout<<"Escaped in "<<q[tail][4]-1<<" minute(s).";f=true;return;}}}}
}int main(){ cin>>l>>r>>c;for(int i=1;i<=l;i++){for(int j=1;j<=r;j++){for(int k=1;k<=c;k++){cin>>a[i][j][k];if(a[i][j][k]=='S'){q[1][1]=i;q[1][2]=j;q[1][3]=k;q[1][4]=1;v[i][j][k]=true;}if(a[i][j][k]=='E'){as=i;asd=j;asdf=k;}}}}bfs();if(f==false){cout<<"Trapped!";}return 0;
}