Submission details:
Submission no: 9461491 Problem no: 532 Problem title: Dungeon Master Status: Accepted Language: C++ Runtime: 0.012 Date of submission: 2011-11-11 Time of submission: 11:12:39
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <queue> #define INF 9999999 using namespace std; typedef struct xp { int l, x, y; } cord; bool color[100][100][100]; int d[100][100][100]; char inp[100][100][100]; int dirs[10][4]={ {-1,0,0}, {1,0,0}, {0,-1,0}, {0,0,-1}, {0,0,1}, {0,1,0} }; int bfs(cord S, cord E, cord M) { int i, j, k; for (i=0 ; i<=M.l+1 ; i++) { for (j=0 ; j<=M.x+1 ; j++) { for (k=0 ; k<=M.y+1 ; k++) { color[i][j][k]=false; d[i][j][k]=INF; } } } color[S.l][S.x][S.y]=true; d[S.l][S.x][S.y]=0; cord u, temp; queue<cord> q; q.push(S); while (!q.empty()) { u = q.front(); q.pop(); for (i=0 ; i<6 ; i++) { temp.l = u.l+dirs[i][0]; temp.x = u.x+dirs[i][1]; temp.y = u.y+dirs[i][2]; if (!color[temp.l][temp.x][temp.y] && inp[temp.l][temp.x][temp.y]!='#') { if (temp.l<1||temp.l>M.l||temp.x<1||temp.x>M.x||temp.y<1||temp.y>M.y) continue; color[temp.l][temp.x][temp.y]=true; d[temp.l][temp.x][temp.y]=d[u.l][u.x][u.y]+1; if (i==E.l && j==E.x && k==E.y) return d[temp.l][temp.x][temp.y]; q.push(temp); } } } return d[E.l][E.x][E.y]; } int main() { int l, w, h, i, j, k, res; cord S, E, M; while (scanf("%d %d %d",&l,&h,&w)==3 && l&&h&&w) { getchar(); M.l = l; M.x = h; M.y = w; for (i=1 ; i<=l ; i++) { for (j=1 ; j<=h ; j++) { gets(&inp[i][j][1]); for (k=1 ; k<=w ; k++) { if (inp[i][j][k]=='S') { S.l = i; S.x = j; S.y = k; } if (inp[i][j][k]=='E') { E.l = i; E.x = j; E.y = k; } } } gets(&inp[i][j][1]); } res = bfs(S,E,M); if (res==INF) printf("Trapped!\n"); else printf("Escaped in %d minute(s).\n",res); } return 0; }
No comments:
Post a Comment
Post your comment here. If you want to say something about programming problems, scripts, software etc, please try to be as descriptive as possible.