zoukankan      html  css  js  c++  java
  • poj 2251 Dungeon Master(广搜)

    题意:三维空间,可以走上下左右前后六个方向,求最短路径,BFS

      

    #include<stdio.h>
    #include<queue>
    #include<string.h>
    using namespace std;
    const int MAXN=50;
    
    char str[MAXN][MAXN][MAXN];
    int step[MAXN][MAXN][MAXN];
    int vis[MAXN][MAXN][MAXN];
    int l,r,c;
    struct Node
    {
        int x,y,z;
    }s,e;
    
    int BFS()
    {
        int i,j;
        Node head,next;
        queue<Node>Q;
        Q.push(s);
        step[s.x][s.y][s.z]=0;
        while(!Q.empty())
        {
            head=Q.front();
            Q.pop();
            for(i=0;i<6;i++)
            {
                next=head;
                if(i==0) next.x-=1;
                if(i==1) next.x+=1;
                if(i==2) next.y-=1;
                if(i==3) next.y+=1;
                if(i==4) next.z-=1;
                if(i==5) next.z+=1;
                if(!vis[next.x][next.y][next.z] && str[next.x][next.y][next.z]==1)
                {
                    vis[next.x][next.y][next.z]=1;
                    Q.push(next);
                    step[next.x][next.y][next.z]=step[head.x][head.y][head.z]+1;
                    if(next.x==e.x && next.y==e.y && next.z==e.z) return  step[head.x][head.y][head.z]+1;
                }
            }
        }
        return  0;
    }
    int main()
    {
        int i,j,k;
        while(scanf("%d%d%d",&l,&r,&c)!=EOF)
        {
            if(l==0 && r==0 && c==0) break;
            memset(vis,0,sizeof(vis));
            memset(str,0,sizeof(str));
            for(i=1; i<=l; i++)
            {
                for(j=1; j<=r; j++)
                {
                    scanf("%s",str[i][j]+1);
                    for(k=1; str[i][j][k]; k++)
                    {
                        if(str[i][j][k]=='#') str[i][j][k]=0;
                        if(str[i][j][k]=='.') str[i][j][k]=1;
                        if(str[i][j][k]=='S')
                        {
                            str[i][j][k]=1;
                            s.x=i;
                            s.y=j;
                            s.z=k;
                        }
                        if(str[i][j][k]=='E')
                        {
                            str[i][j][k]=1;
                            e.x=i;
                            e.y=j;
                            e.z=k;
                        }
                    }
                }
            }
            int ans=BFS();
            if(ans) printf("Escaped in %d minute(s).\n",ans);
            else printf("Trapped!\n");
    
        }
        return 0;
    }
  • 相关阅读:
    docker 删除本地镜像
    hadoop 伪分布环境部署
    docker多镜像+nginx+django环境部署
    docker+django 运行环境部署
    设计数据结构-LRU缓存算法
    设计数据结构-Unionfind并查集算法
    String#intern理解
    java常见API和集合
    链表总结
    二叉树的基础总结
  • 原文地址:https://www.cnblogs.com/zsboy/p/2892882.html
Copyright © 2011-2022 走看看