POJ - 2251 Dungeon Master (简单搜索)

题目链接
这一道题是三维的走迷宫,bfs就可以了;

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
struct node
{
    int x,y,z,l;
} s,e,k,t;
int to[6][3]= {1,0,0, -1,0,0, 0,1,0, 0,-1,0, 0,0,1, 0,0,-1};    //方向辅助数组
char G[40][40][40];                                             //存图
bool vis[40][40][40];                                           //标记状态
int main()
{
    int l,r,c;
    while(~scanf("%d%d%d",&l,&r,&c)&&l&&r&&c)
    {
        memset(vis,0,sizeof(vis));
        for(int i=0; i<l; i++)
            for(int j=0; j<r; j++)
                for(int k=0; k<c; k++)
                {
                    cin>>a[i][j][k];
                    if(a[i][j][k]=='S')s.x=i,s.y=j,s.z=k,s.l=0; //存起点
                    if(a[i][j][k]=='E')e.x=i,e.y=j,e.z=k;       //存终点
                }
        queue<node>q;
        q.push(s);                                              //压入起点
        vis[s.x][s.y][s.z]=1;
        while(!q.empty())
        {
            k=q.front();
            if(k.x==e.x&&k.y==e.y&&k.z==e.z)break;              //判断是否到达终点
            q.pop();
            for(int i=0; i<6; i++)                              //向相邻点遍历
            {
                t.x=k.x+to[i][0];
                t.y=k.y+to[i][1];
                t.z=k.z+to[i][2];
                t.l=k.l+1;                                      //记录步数
                if(vis[t.x][t.y][t.z]==0&&a[t.x][t.y][t.z]=='.'||a[t.x][t.y][t.z]=='E')
                    q.push(t);
                vis[t.x][t.y][t.z]=1;
            }
        }
        if(q.empty())
            cout<<"Trapped!"<<endl;
        else 
            printf("Escaped in %d minute(s).\n",k.l);
    }
    return 0;
}
发布了19 篇原创文章 · 获赞 19 · 访问量 687

猜你喜欢

转载自blog.csdn.net/qq_44086097/article/details/104148495