Description
Input
Output
Escaped in x minute(s).
Trapped!
Sample Input
3 4 5 S.... .###. .##.. ###.# ##### ##### ##.## ##... ##### ##### #.### ####E 1 3 3 S## #E# ### 0 0 0
Sample Output
Escaped in 11 minute(s). Trapped!
题目大意:
给你一个3维的迷宫,维数是L*R*C,告诉了你起始的地点和终止的地点,每次只能够向6个方向来走动,问是否能够走出去,如果能的话,求出这个
最小的时间。
解题思路:
直接BFS上最短时间问题,len[rear] = len[front]+1;每次进队前都要更新路径就好了。
代码:
# include<cstdio> # include<iostream> # include<algorithm> # include<functional> # include<cstring> # include<string> # include<cstdlib> # include<iomanip> # include<numeric> # include<cctype> # include<cmath> # include<ctime> # include<queue> # include<stack> # include<list> # include<set> # include<map> using namespace std; const double PI=4.0*atan(1.0); typedef long long LL; typedef unsigned long long ULL; # define inf 999999999 # define MAX 33 char grid[MAX][MAX][MAX]; int book[MAX][MAX][MAX]; int len[MAX*MAX*MAX]; int l,r,c; int ans; int st_x,st_y,st_z; int ed_x,ed_y,ed_z; int next[6][3] = {{1,0,0},{0,1,0},{-1,0,0},{0,-1,0},{0,0,1},{0,0,-1}}; struct node { int x; int y; int z; }que[MAX*MAX*MAX]; void input() { for ( int i = 0;i < l;i++ ) { for ( int j = 0;j < r;j++ ) { for ( int k = 0;k < c;k++ ) { char ch; ch = getchar(); grid[i][j][k] = ch; if ( ch=='S' ) { st_x = i; st_y = j; st_z = k; } } getchar(); } getchar(); } } int bfs() { int front,rear; memset(book,0,sizeof(book)); memset(len,0,sizeof(len)); que[0].x = st_x; que[0].y = st_y; que[0].z = st_z; rear = front = 0; while ( front <= rear ) { for ( int i = 0;i < 6;i++ ) { int n_x = que[front].x+next[i][0]; int n_y = que[front].y+next[i][1]; int n_z = que[front].z+next[i][2]; if ( book[n_x][n_y][n_z]==0&&(grid[n_x][n_y][n_z]=='.'||grid[n_x][n_y][n_z]=='E')&&n_x>=0&&n_x<l&&n_y>=0&&n_y<r&&n_z>=0&&n_z<c ) { book[n_x][n_y][n_z] = 1; que[++rear].x = n_x; que[rear].y = n_y; que[rear].z = n_z; len[rear] = len[front]+1; if ( grid[n_x][n_y][n_z] == 'E' ) { return len[rear]; } } } front++; } return 0; } int main(void) { while ( cin>>l>>r>>c ) { if ( l==0&&r==0&&c==0 ) break; getchar(); input(); ans = bfs(); if ( ans ) printf("Escaped in %d minute(s).\n",ans); else printf("Trapped!\n"); } return 0; }