zoukankan      html  css  js  c++  java
  • POJ 2251 bfs

    妈哒受不鸟了!!状况百出就是A不了啊shit!!!

    题意: 三维数组,从S走到E,"."是可走的.

    AC代码:

    #include <stdio.h>
    #include <string.h>
    #include <queue>
    #include <algorithm>
    char s[35][35][35];
    int vis[35][35][35];
    const int dx[6]= {-1,1,0,0,0,0};
    const int dy[6]= {0,0,-1,1,0,0};
    const int dz[6]= {0,0,0,0,-1,1};
    using namespace std;
    int ans,n,m,z;
    struct node
    {
        int x;
        int y;
        int z;
        int cnt;
    } ds,de,k;
    int bfs()
    {
        queue<node>q;
        q.push(ds);
        while(!q.empty())
        {
            node s1=q.front();//重命名的错误再一次发生,是时候规范一下写法了;
            q.pop();
            for(int i=0; i<6; i++)
            {
                k.x=s1.x+dz[i];
                k.y=s1.y+dx[i];
                k.z=s1.z+dy[i];
                k.cnt=s1.cnt+1;
                if(k.x==de.x&&k.y==de.y&&k.z==de.z)//搜索的时候一定要想清楚情况,不能想当然.
                {
                    return k.cnt;
                }
                int x1=k.x;
                int y1=k.y;
                int z1=k.z;
                if(x1>=0&&x1<z&&y1>=0&&y1<n&&z1>=0&&z1<m&&s[x1][y1][z1]=='.'&&vis[x1][y1][z1]==0)
                {
                    vis[x1][y1][z1]=1;
                    q.push(k);
                }
            }
        }
        return 0;
    }
    int main()
    {
        while(~scanf("%d%d%d",&z,&n,&m))
        {
            if(n==0&&m==0&&z==0)
            {
                break;
            }
            memset(vis,0,sizeof(vis));
            for(int i=0; i<z; i++)//三维数组,由于输入的限制,必须是层数在最外面.
            {
                for(int j=0; j<n; j++)
                {
                    scanf("%s",s[i][j]);
                    for(int k=0; k<m; k++)
                    {
                        if(s[i][j][k]=='S')
                        {
                            ds.x=i;
                            ds.y=j;
                            ds.z=k;
                            ds.cnt=0;
                        }
                        else if(s[i][j][k]=='E')
                        {
                            de.x=i;
                            de.y=j;
                            de.z=k;
                        }
                    }
                }
            }
            int ans=bfs();
            if(ans)
            {
                printf("Escaped in %d minute(s).
    ",ans);
            }
            else
            {
                printf("Trapped!
    ");
            }
        }
        return 0;
    }
  • 相关阅读:
    点分治。。。。。
    巧克力
    离散化初步
    [NOI1998]:围巾裁剪
    关于Tarjan(3)——离线LCA
    Eigen学习笔记2-Matrix类
    Eigen学习
    Git使用入门笔记
    LeetCode 之二叉树中序遍历(使用栈实现)
    leetCode之二叉树数中序遍历(递归实现)
  • 原文地址:https://www.cnblogs.com/qioalu/p/4916890.html
Copyright © 2011-2022 走看看