zoukankan      html  css  js  c++  java
  • 三维BFS

    链接:https://ac.nowcoder.com/acm/contest/3947/J
    来源:牛客网

    Nancy喜欢吃果冻!
    Nancy钻进了一个n×n×n的果冻里,她想从(1,1,1)一路上、下、左、右、前、后六个方向吃到(n,n,n)。
    但果冻毕竟是有许多口味的,标记为*的口味是Nancy不愿意吃的,其余的果冻均标记为.。
    Nancy不想吃坏肚子,于是她想尽可能少的吃果冻。
    下面给出果冻的情况,请你帮忙计算一下她能吃多少块果冻叭!

    输入描述:

    第一行:一个整数n。
    接下来n层,每组n行,每行n列,表示果冻(i,j,k)的情况(如题目描述所述)。
    数据满足:1n100,保证果冻(1,1,1)不是Nancy不愿意吃的。

    输出描述:

    如果可以到达(n,n,n),请输出路上吃的果冻数量,否则请输出-1。
    示例1

    输入

    复制
    2
    .*
    ..
    *.
    ..

    输出

    复制
    4



    就是和二维的一样
    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<cstring>
    using namespace std;
    const int maxn=1e2+100;
    char a[maxn][maxn][maxn];
    int dis[maxn][maxn][maxn];
    struct node{
        int x,y,z;
    };
    int dx[]={0,0,1,0,0,-1};
    int dy[]={0,1,0,0,-1,0};
    int dz[]={1,0,0,-1,0,0};
    queue<node>q;
    int n; 
    void bfs(){
        q.push({1,1,1});
        dis[1][1][1]=1;
        while(!q.empty()){
            node now=q.front();
            q.pop();
            for(int i=0;i<6;i++){
                int xx=now.x+dx[i],yy=now.y+dy[i],zz=now.z+dz[i];
                if(xx>=1&&yy>=1&&zz>=1&&xx<=n&&yy<=n&&zz<=n &&dis[xx][yy][zz]==-1&&a[xx][yy][zz]!='*'){
                    q.push({xx,yy,zz});
                    dis[xx][yy][zz]=dis[now.x][now.y][now.z]+1;
                }
            }
        }
    }
    int main(){
        memset(dis,-1,sizeof(dis));
        cin>>n;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                for(int k=1;k<=n;k++){
                    cin>>a[i][j][k];
                }
            }
        }
        bfs();
        cout<<dis[n][n][n]<<endl; 
    }


  • 相关阅读:
    Nginx 和 PHP的安装配置
    hdu1166 敌兵布阵
    乘法逆元详解
    SPFA算法
    Kruskal算法&Prim算法
    WC2018 文艺汇演《退役的你》
    HDU2577 How to Type
    裴蜀定理的证明
    CSP J/S 2019受虐记
    Dijkstra算法详解
  • 原文地址:https://www.cnblogs.com/lipu123/p/14264977.html
Copyright © 2011-2022 走看看