zoukankan      html  css  js  c++  java
  • poj2251 Dungeon Master (bfs)

    *题意:

         给定三维迷宫,能走出来就输出最短用时,走不出输出
    *代码:
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    char maze[31][31][31];
    bool visit[31][31][31];
    int queue[28000][3];
    int time[31][31][31];
    int l,c,r;
    int dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};
    void bfs(int start[3],int end[3])
    {
        int i,k,front=0,back=1,flag=0,temp[3],next[3];
        queue[0][0]=start[0];
        queue[0][1]=start[1];
        queue[0][2]=start[2];
        while(front<back)
        {
              temp[0]=queue[front][0];
              temp[1]=queue[front][1];
              temp[2]=queue[front++][2];
              for(i=0;i<6;i++)
              {
                  next[0]=temp[0]+dir[i][0];
                  next[1]=temp[1]+dir[i][1];
                  next[2]=temp[2]+dir[i][2];
                  if(next[0]<l&&next[1]<r&&next[2]<c&&next[0]>=0&&next[1]>=0&&next[2]>=0&&maze[next[0]][next[1]][next[2]]!='#'&&!visit[next[0]][next[1]][next[2]])
                  {
                    time[next[0]][next[1]][next[2]]=time[temp[0]][temp[1]][temp[2]]+1;
                    visit[next[0]][next[1]][next[2]]=1;
                    if(next[0]==end[0]&&next[1]==end[1]&&next[2]==end[2])
                    {
                        cout<<"Escaped in "<<time[end[0]][end[1]][end[2]]<<" minute(s)."<<endl;
                        flag=1;
                        break;
                    }
                    else
                    {
                        queue[back][0]=next[0];
                        queue[back][1]=next[1];
                        queue[back++][2]=next[2];
                    }
                  }
              }
              if(flag)
                  break;
        }
        if(!flag)
            cout<<"Trapped!"<<endl;
    }
    int main()
    {
        //freopen("input.txt","r",stdin);
        //freopen("output.txt","w",stdout);
        int i,j,k,start[3],end[3];
        while(cin>>l>>r>>c)
        {
            if(l==0&&r==0&&c==0)
                break;
            memset(visit,0,sizeof(visit));
            memset(time,0,sizeof(time));
            for(i=0;i<l;i++)
                for(j=0;j<r;j++)
                    for(k=0;k<c;k++)
                    {
                        cin>>maze[i][j][k];
                        if(maze[i][j][k]=='S')
                        {
                            start[0]=i;
                            start[1]=j;
                            start[2]=k;
                            visit[i][j][k]=1;
                        }
                        if(maze[i][j][k]=='E')
                        {
                            end[0]=i;
                            end[1]=j;
                            end[2]=k;
                        }
                    }
                    bfs(start,end);
        }
        return 0;
    }
  • 相关阅读:
    opensuse使用zypper安装软件
    补习系列(1)-springboot项目基础搭建课
    补习系列-springboot-使用assembly进行项目打包
    log4j2 使用纪要
    mongos-sharding连接池配置
    maven-代码风格检查工具
    mtools-你可能没用过的mongodb神器
    mongodb分布式集群搭建手记
    mongodb分片扩展架构
    mongodb副本集高可用架构
  • 原文地址:https://www.cnblogs.com/Neptunes/p/3350290.html
Copyright © 2011-2022 走看看