POJ2251 BFS

来源:互联网 发布:百川环评工程师软件 编辑:程序博客网 时间:2024/05/19 12:37

题目

上代码

#include <iostream>#include <cstdio>#include <cstring>#include <queue>using namespace std;struct node{    int x, y, z, step;};int ex, ey, ez;int L, R, C;                //六个方向int dir[6][3] = {{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};int visit[35][35][35];char M[35][35][35];node s;int check(node a){    if(a.x < 0 || a.x >= L || a.y < 0 || a.y >= R || a.z < 0 || a.z >= C)        return 1;    else if(visit[a.x][a.y][a.z])        return 1;    else if(M[a.x][a.y][a.z] == '#')        return 1;    return 0;}int dfs(){    queue<node> q;    q.push(s);    node a;    while(!q.empty())    {        a = q.front();        q.pop();        visit[a.x][a.y][a.z] = 1;        if(a.x == ex && a.y == ey && a.z == ez)            return a.step;        for(int i = 0; i < 6; i++)        {            node next;            next = a;            next.x = a.x+dir[i][0];            next.y = a.y+dir[i][1];            next.z = a.z+dir[i][2];            if(check(next)) continue;            next.step = a.step+1;            visit[next.x][next.y][next.z] = 1;            q.push(next);        }    }    return 0;}int main(){    //freopen("in.txt", "r", stdin);    while(cin >> L >> R >> C && L)    {        memset(visit, 0, sizeof(visit));        for(int i = 0; i < L; i++)            for(int j = 0; j < R; j++)                for(int k = 0; k < C; k++)                {                    cin >> M[i][j][k];                    if(M[i][j][k] == 'S') { s.x = i; s.y = j; s.z = k;}//起点                    if(M[i][j][k] == 'E') { ex = i; ey = j; ez = k;}//终点                }        int ans = dfs();        if(ans)            printf("Escaped in %d minute(s).\n", ans);        else            printf("Trapped!\n");    }    return 0;}
原创粉丝点击