• BFS 三维 Dungeon Master POJ


    三维的BFS求最短路。

    自己测试数据用的输出最后一定要注释掉,交了很多次居然一直Output Limite,居然一直都没有发现多输出了数据,被自己蠢哭。

    以后一定要仔细检查输出。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<stack>
    #include<vector>
    using namespace std;
    typedef struct
    {
        int x,y,z;
        int step;
    }Point;
    char a[31][31][31];
    int vis[31][31][31];
    int l,r,c,mi,flag;
    int sx,sy,sz,ex,ey,ez;
    int next[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1} };
    int Bfs()
    {
        Point f1,f2;
        f1.x=sx,f1.y=sy,f1.z=sz,f1.step=0;
        queue<Point>q;
        q.push(f1);
        vis[sx][sy][sz]=1;
        while(!q.empty())
        {
            f1=q.front();
            if(f1.x==ex&&f1.y==ey&&f1.z==ez){flag=1;return f1.step;}
            q.pop();
            for(int i=0;i<6;i++)
            {
                f2.x=f1.x+next[i][0];
                f2.y=f1.y+next[i][1];
                f2.z=f1.z+next[i][2];
                f2.step=f1.step+1;
                if(f2.x>=0&&f2.x<r&&f2.y>=0&&f2.y<c&&f2.z>=0&&f2.z<l&&!vis[f2.x][f2.y][f2.z]&&a[f2.z][f2.x][f2.y]!='#')
                {
                  //  cout<<f2.x<<"  "<<f2.y<<"  "<<f2.z<<endl;
                    vis[f2.x][f2.y][f2.z]=1;
                    q.push(f2);
                }
            }
    
        }
    
    return 0;
    }
    int main()
    {
        while(scanf("%d%d%d",&l,&r,&c),l+r+c)
        {
    
                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') sx=j,sy=k,sz=i;
                           if(a[i][j][k]=='E') ex=j,ey=k,ez=i;
                       }
                       flag=0;
                       memset(vis,0,sizeof(vis));
                       int g=Bfs();
                    if(flag==0) printf("Trapped!
    ");
                     else printf("Escaped in %d minute(s).
    ",g);
    
        }
        return 0;
    }
  • 相关阅读:
    grep命令
    Linux下tar.xz结尾的文件的解压方法
    const char*, char const*, char*const的区别
    "undefined reference to" 多种可能出现的问题解决方法
    Linux查找含有某字符串的所有文件
    Netbeans C++ unable to resolve identifier 无法解析标识符
    Linux 下编译C程序的全过程
    linux tar.gz zip 解压缩 压缩命令
    安装anaconda
    Mongodb数据迁移步骤
  • 原文地址:https://www.cnblogs.com/Twsc/p/6821898.html
Copyright © 2020-2023  润新知