zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    December 23rd 2016 Week 52nd Friday
    December 22nd 2016 Week 52nd Thursday
    December 21st 2016 Week 52nd Wednesday
    December 20th 2016 Week 52nd Tuesday
    December 19th 2016 Week 52nd Sunday
    December 18th 2016 Week 52nd Sunday
    uva294(唯一分解定理)
    uva11624Fire!(bfs)
    fzu2150Fire Game(双起点bfs)
    poj3276Face The Right Way
  • 原文地址:https://www.cnblogs.com/Twsc/p/6821898.html
Copyright © 2011-2022 走看看