• POJ 2251 Dungeon Master (bfs)


    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    #include<queue>
    using namespace std;
    char mat[50][50][50];
    int vis[50][50][50];
    int op[6][3]={0,-1,0, 0,1,0, 1,0,0, -1,0,0 ,0,0,1, 0,0,-1 };
    int ok;
    int z,n,m;
    struct Node{
      int x,y,z;
      int rt;
    };
    Node now[200000];
    bool isok(Node node)
    {
        if(node.z<1||node.z>z||node.x<1||node.x>n||node.y<0||node.y>=m)
            return false;
        if(vis[node.z][node.x][node.y]==1||mat[node.z][node.x][node.y]=='#')
            return false;
        return true;
    }
    void bfs(int si,int sj,int sk)  //z x y
    {
       int front,rear;
       int x,y,z;
       front=0,rear=1;
       z=now[0].z=si;
       x=now[0].x=sj;
       y=now[0].y=sk;
       now[0].rt=0;
       vis[z][x][y]=1;
       while(front<rear)
       {
          // Node temp;
          z=now[front].z;
          x=now[front].x;
          y=now[front].y;
           if(mat[z][x][y]=='E')
           {
               ok=1;
               printf("Escaped in %d minute(s).
    ",now[front].rt);
           }
    
           for(int i=0;i<6;i++)
           {
               z=now[rear].z=now[front].z+op[i][0];
               x=now[rear].x=now[front].x+op[i][1];
               y=now[rear].y=now[front].y+op[i][2];
                 now[rear].rt=now[front].rt+1;
    
               if(isok(now[rear]))
               {
                   vis[z][x][y]=1;
                   rear++;
               }
           }
           front++;
       }
    
    }
    int main()
    {
    
        int i,j,k;
        int si,sj,sk;
        while(scanf("%d%d%d",&z,&n,&m)!=EOF)
        {
            if(z==0&&n==0&&m==0) break;
            ok=0;
            memset(vis,0,sizeof(vis));
            for(i=1;i<=z;i++)
            {
                for(j=1;j<=n;j++)
                {
                   scanf("%s",mat[i][j]);
                   for(k=0;k<m;k++)
                   {
                       if(mat[i][j][k]=='S')
                        {
                           si=i;sj=j;sk=k;
                        }
                   }
                }
            }
            bfs(si,sj,sk);
            if(ok==0) printf("Trapped!
    ");
    
        }
        return 0;
    }
    
  • 相关阅读:
    Spring学习之声明式事物管理
    SSH整合所需jar
    Spring学习之AOP
    常见MyEclipse报错—— serialVersionUID的作用
    Spring学习之基本概念
    Java基础——I/O续
    Java基础——I/O
    Vim学习总结
    Java基础——异常处理
    Git 学习总结
  • 原文地址:https://www.cnblogs.com/sola1994/p/4678954.html
Copyright © 2020-2023  润新知