POJ 2251

来源:互联网 发布:哪个软件扫码出价格 编辑:程序博客网 时间:2024/06/08 09:18

入门广搜,无WA点无坑点。

#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <algorithm>#include <iostream>#include <queue>using namespace std;const int inf = 100000000;struct point{    int x;    int y;    int z;};typedef point P;char arr[40][40][40];int sx, sy, sz, gx, gy, gz;int dir[6][3] = {{1, 0, 0}, {0, 1, 0}, {-1, 0, 0}, {0, -1, 0}, {0, 0, 1}, {0, 0, -1}};int vis[40][40][40], l, r, c, flag;void bfs(){    queue<P> que;    P tmp1, tmp2;    int i, j, k, dx, dy, dz;    for(i = 0; i < l; i++){        for(j = 0; j < r; j++){            for(k = 0; k < c; k++){                vis[i][j][k] = inf;            }        }    }    vis[sx][sy][sz] = 0;    tmp1.x = sx, tmp1.y = sy, tmp1.z = sz;    que.push(tmp1);    while(!que.empty()){        tmp2 = que.front();        que.pop();        if(tmp2.x == gx && tmp2.y == gy && tmp2.z == gz){            flag = 1;            break;        }        for(i = 0; i < 6; i++){            dx = tmp2.x + dir[i][0];            dy = tmp2.y + dir[i][1];            dz = tmp2.z + dir[i][2];            if(0 <= dx && dx < l && 0 <= dy && dy < r && 0 <= dz && dz < c && arr[dx][dy][dz] != '#' && vis[dx][dy][dz] == inf){                tmp1.x = dx, tmp1.y = dy, tmp1.z = dz;                que.push(tmp1);                vis[dx][dy][dz] = vis[tmp2.x][tmp2.y][tmp2.z] + 1;            }        }    }return ;}int main(){    int i, j, k;    while(scanf("%d %d %d", &l, &r, &c) != EOF){        if(l == 0 && r == 0 && c == 0){            break;        }        flag = 0;        memset(arr, 0, sizeof(arr));        for(i = 0; i < l; i++){            getchar();            for(j = 0; j < r; j++){                for(k = 0; k < c; k++){                    scanf("%c", &arr[i][j][k]);                }                getchar();            }        }        for(i = 0; i < l; i++){            for(j = 0; j < r; j++){                for(k = 0; k < c; k++){                    if(arr[i][j][k] == 'S'){                        sx = i, sy = j, sz = k;                    }                    if(arr[i][j][k] == 'E'){                        gx = i, gy = j, gz = k;                    }                }            }        }        bfs();        if(vis[gx][gy][gz] == inf){            printf("Trapped!\n");        }        else{            printf("Escaped in %d minute(s).\n", vis[gx][gy][gz]);        }    }return 0;}


0 0