POJ-2251

来源:互联网 发布:淘宝网短棉衣 编辑:程序博客网 时间:2024/05/21 11:55
#include <stdio.h>#include <string.h>#define MAX 30000char dungeon[30][30][30];int visits[30][30][30];int queue[MAX], front, rear;int move[6][3] = {{-1, 0, 0}, {0, -1, 0}, {0, 0, 1}, {0, 1, 0}, {0, 0, -1}, {1, 0, 0}}; // 移动方位 int l, r, c;int sL, sR, sC;int bfs(int x, int y, int z){     int i, xt, yt, zt;     front = rear = 0;     queue[rear++] = x*r*c+y*c+z;     visits[x][y][z] =  1;          while (front < rear) {           x=queue[front]/(r*c);   y=(queue[front]%(r*c))/c;   z=(queue[front]%(r*c))%c;           front++;           for (i = 0; i < 6; i++) {               xt = x+move[i][0];               yt = y+move[i][1];               zt = z+move[i][2];               if (xt>=0 && xt<l && yt>=0 && yt<r && zt>=0 && zt<c && dungeon[xt][yt][zt] != '#' && !visits[xt][yt][zt]) {                  if (dungeon[xt][yt][zt] == 'E')                     return visits[x][y][z];                  visits[xt][yt][zt] = visits[x][y][z]+1;                  queue[rear++] = xt*r*c + yt*c + zt;                                }           }     }     return 0;}int main(){    int i, j, k, minute;    while (scanf("%d%d%d\n", &l, &r, &c), l, r, c) {          memset(dungeon, '#', sizeof(dungeon));  for (i = 0; i < l; i++) {              for (j = 0; j < r; j++) {                  for (k = 0; k < c; k++) {                      visits[i][j][k] = 0;                      dungeon[i][j][k] = getchar();                      if (dungeon[i][j][k] == 'S') {                         sL = i;                         sR = j;                         sC = k;                      }                  }                  getchar();              }  getchar();         } minute = bfs(sL, sR, sC); if (minute)            printf("Escaped in %d minute(s).\n", minute);         else            printf("Trapped!\n");    }    return 0;}


原创粉丝点击