依然BFS。
三维迷宫的竖坐标是第一维!一不小心就写串了~~~
/*This Code is Submitted by Iris for Problem 1448 at 2013-07-24 17:48:59*/ #include <cstdio> #include <cstring> #include <queue> #include <math.h> using namespace std; typedef struct point{ int x,y,z,step; }point; int move [6][3] = {{1,0,0},{-1,0,0},{0,0,-1},{0,0,1},{0,1,0},{0,-1,0}}; int main() { char cube[30][30][30]; int map[30][30][30]; int l,r,c; while(scanf("%d %d %d",&l,&r,&c)&&(l+r+c)) { for(int i=0;i<l;i++) for(int j=0;j<r;j++) scanf("%s",cube[i][j]); point st,en; for(int i=0;i<l;i++) for(int j=0;j<r;j++) for(int k=0;k<c;k++) { if(cube[i][j][k]=='#') map[i][j][k] = 1; else if(cube[i][j][k]=='.') map[i][j][k] = 0; else if(cube[i][j][k]=='S') { st.z = i; st.x = j; st.y = k; st.step = 0; map[i][j][k] = 1; } else{ en.z = i; en.x = j; en.y = k; map[i][j][k] = 0; } } // for(int i=0;i<l;i++) // { // for(int j=0;j<r;j++) // { // for(int k=0;k<c;k++) // printf("%d ",map[i][j][k]); // printf("\n"); // } // printf("\n"); // } queue<point> q; q.push(st); bool fnd = 0; while(!q.empty()) { point p = q.front(); // printf("pop %d %d %d\n",p.x,p.y,p.z); q.pop(); for(int i=0;i<6;i++) { int tz = move[i][0] + p.z; int tx = move[i][1] + p.x; int ty = move[i][2] + p.y; if(tx==en.x && ty==en.y && tz==en.z) { printf("Escaped in %d minute(s).\n",p.step+1); fnd = 1; break; } // if(tx>=0 && tx<r && // ty>=0 && ty<c && // tz>=0 && tz<l) // printf("map = %d\n",map[tx][ty][tz]); if(tx>=0 && tx<r && ty>=0 && ty<c && tz>=0 && tz<l && !map[tz][tx][ty]) { point tmp = {tx,ty,tz,p.step+1}; q.push(tmp); // printf("push %d %d %d\n",tx,ty,tz); map[tz][tx][ty] = 1; } } if(fnd==1) { // printf("out"); break; } if(q.empty()) printf("Trapped!\n"); } } return 0; }