• poj2251(Dungeon Master)


    题目地址:Dungeon Master

    题目大意:

        一个三维的图,‘.’代表空白的地方,“#”代表墙无法通过。从“S”地方开始,问你是否能达到“E”点,如果能输出多少时间,如果不能输出“Trapped!”。

    解题思路:

        搜索BFS。  刚开始vis数组标记的时候出现错误,只是在出队列的时候标记该点的坐标被访问,这样会导致,如果a(x,y,z)点没有出队列的时候,该点的vis情况还是为0,这时候如果有其他的点衍生出来的点还包括a点的话,a点还是会进队列,所以会MTL。  所以正常的标记vis,应该 在进队列的时候标记,这样始终保证队列里的点不会重复进入。

    代码:

      1 #include <algorithm>
      2 #include <iostream>
      3 #include <sstream>
      4 #include <cstdlib>
      5 #include <cstring>
      6 #include <cstdio>
      7 #include <string>
      8 #include <bitset>
      9 #include <vector>
     10 #include <queue>
     11 #include <stack>
     12 #include <cmath>
     13 #include <list>
     14 //#include <map>
     15 #include <set>
     16 using namespace std;
     17 
     18 const int d1y[]= {0,-1,0,1};
     19 const int d1z[]= {-1,0,1,0};
     20 const int dx[]= {1,-1};
     21 int l,r,c;
     22 char map[31][31][31];
     23 int b[31][31][31];
     24 int vis[31][31][31];
     25 int ce;
     26 int ei,ej,ek;
     27 int BFS(int x,int y,int z)
     28 {
     29     int i,j;
     30     int xx,yy,zz;
     31     queue<int >Q;
     32     Q.push(x);
     33     Q.push(y);
     34     Q.push(z);
     35     while(!Q.empty())
     36     {
     37         xx=Q.front();
     38         Q.pop();
     39         yy=Q.front();
     40         Q.pop();
     41         zz=Q.front();
     42         Q.pop();
     43       //  vis[xx][yy][zz]=1;
     44         if (xx==ei&&yy==ej&&zz==ek)
     45         {
     46             ce=b[xx][yy][zz];
     47             return 0;
     48         }
     49         for(i=0; i<4; i++)
     50         {
     51             x=xx;
     52             y=yy+d1y[i];
     53             z=zz+d1z[i];
     54             if (map[x][y][z]!='#'&&x>=0&&x<l&&y>=0&&y<r&&z>=0&&z<c&&!vis[x][y][z])
     55             {
     56                 Q.push(x);
     57                 Q.push(y);
     58                 Q.push(z);
     59                 b[x][y][z]=b[xx][yy][zz]+1;
     60                 vis[x][y][z]=1;
     61             }
     62         }
     63         for(i=0; i<2; i++)
     64         {
     65             x=xx+dx[i];
     66             y=yy;
     67             z=zz;
     68             if (map[x][y][z]!='#'&&x>=0&&x<l&&y>=0&&y<r&&z>=0&&z<c&&!vis[x][y][z])
     69             {
     70                 Q.push(x);
     71                 Q.push(y);
     72                 Q.push(z);
     73                 b[x][y][z]=b[xx][yy][zz]+1;
     74                 vis[x][y][z]=1;
     75             }
     76         }
     77     }
     78     return 0;
     79 }
     80 int main()
     81 {
     82     while(scanf("%d%d%d",&l,&r,&c)&&(l+r+c))
     83     {
     84         memset(map,0,sizeof(map));
     85         memset(b,0,sizeof(b));
     86         memset(vis,0,sizeof(vis));
     87         int i,j,k;
     88         int si,sj,sk;
     89         getchar();
     90         for(i=0; i<l; i++)
     91         {
     92             for(j=0; j<r; j++)
     93             {
     94                 for(k=0; k<c; k++)
     95                 {
     96                     scanf("%c",&map[i][j][k]);
     97                     if (map[i][j][k]=='S')
     98                     {
     99                         si=i;
    100                         sj=j;
    101                         sk=k;
    102                     }
    103                     if (map[i][j][k]=='E')
    104                     {
    105                         ei=i;
    106                         ej=j;
    107                         ek=k;
    108                     }
    109                 }
    110                 getchar();
    111             }
    112             getchar();
    113         }
    114         ce=0;
    115         BFS(si,sj,sk);
    116         if (ce)
    117             printf("Escaped in %d minute(s).
    ",ce);
    118         else
    119             printf("Trapped!
    ");
    120     }
    121     return 0;
    122 }
    View Code
  • 相关阅读:
    java中源代码和lib库中有包名和类名都相同的类(转)
    Python 入门之基本数据类型
    Python 学习经历分享
    String 与不可变对象
    String 的常用操作
    Java 中的国际化
    接口和工厂设计模式
    抽象类和模板设计模式
    Java中的访问控制权限
    Java 中类的初始化过程
  • 原文地址:https://www.cnblogs.com/ZhaoPengkinghold/p/3890539.html
Copyright © 2020-2023  润新知