Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 16178 | Accepted: 6268 |
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维的迷宫,只需要加上上下两个方向就行了,其他的就是简单的bfs。
开始就是在判断那个进队的if语句中。。应该是map[xx][yy][zz]!=‘#‘, 开始写成了map[xx][yy][zz]==‘.‘;所以害我调了一会。。
#include<cstdio> #include<iostream> #include<cstring> #include<queue> #include<algorithm> #include<vector> using namespace std; const int N = 105; char map[N][N][N]; int vist[N][N][N]; struct node { int x; int y; int z; int num; }; queue<node>q; int dx[]={1,-1,0,0,0,0}; int dy[]={0,0,0,0,-1,1}; int dz[]={0,0,-1,1,0,0}; int flag; int t, n, m; int xx, yy, zz; void bfs() { flag = 0; while( !q.empty() ) { node temp = q.front(); //cout<<map[temp.x][temp.y][temp.z]<<" "; //printf( "%d %d %d\n", temp.x, temp.y, temp.z ); if( map[temp.x][temp.y][temp.z]=='E' ) { printf("Escaped in %d minute(s).\n", temp.num); flag = 1; //printf("1\n"); break; } q.pop(); for( int i=0; i<6; i++ ) { xx = temp.x + dx[i]; yy = temp.y + dy[i]; zz = temp.z + dz[i]; //printf( "%d %d %d\n" ,xx,yy,zz); if( xx>=1 && xx<=t && yy>=1 && yy<=n &&zz>=1 && zz<=m && !vist[xx][yy][zz] && map[xx][yy][zz]!='#' ) { node next; next.x = xx; next.y = yy; next.z = zz; next.num = temp.num+1; //printf( "%d %d %d\n", xx, yy, zz ); vist[xx][yy][zz] = true; q.push( next ); } } } if( !flag ) printf("Trapped!\n"); } int main() { while( scanf("%d%d%d", &t, &n, &m) &&t &&n &&m ) { node frist; while( !q.empty() ) q.pop(); memset( vist, false, sizeof( vist ) ); for(int i=1; i<=t; i++) for(int j=1; j<=n; j++) for(int k=1; k<=m; k++) { cin>>map[i][j][k]; if( map[i][j][k]=='S' ) { frist.x = i; frist.y = j; frist.z = k; } } frist.num=0; vist[frist.x][frist.y][frist.z] = true; q.push( frist ); bfs(); } return 0; }
POJ 2251:Dungeon Master(三维BFS),布布扣,bubuko.com
POJ 2251:Dungeon Master(三维BFS)
原文地址:http://blog.csdn.net/u013487051/article/details/37901353