BFS + 三维


来源:牛客网

Nancy喜欢吃果冻!

Nancy钻进了一个n×n×nn \times n \times nn×n×n的果冻里,她想从(1,1,1)一路上、下、左、右、前、后六个方向吃到(n,n,n)。

但果冻毕竟是有许多口味的,标记为*的口味是Nancy不愿意吃的,其余的果冻均标记为.。

Nancy不想吃坏肚子,于是她想尽可能少的吃果冻。
下面给出果冻的情况,请你帮忙计算一下她能吃多少块果冻叭!

输入描述:

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

输出描述:

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

示例1

输入

复制2 .* .. *. ..

2
.*
..
*.
..

输出

复制4

4

Jelly (简单BFS&三维)
思路:板子题。具体看代码。

AC代码:

#include<bits/stdc++.h>
using namespace std;
const int N=1e2+5;
int n,d[6][3]={1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1};
char mp[N][N][N];
int a[N][N][N];
struct p{
    int x,y,z;
}s,e;
#define jg(x,y,z) (x>=0&&x<n&&y>=0&&y<n&&z>=0&&z<=n)
int bfs(){
    queue<p>q;
    q.push({0,0,0});
    while(q.size()){
        s=q.front();q.pop();
        if(s.x==n-1&&s.y==n-1&&s.z==n-1) return a[s.x][s.y][s.z];
        for(int i=0;i<6;i++)
        {
            int nx=s.x+d[i][0],ny=s.y+d[i][1],nz=s.z+d[i][2];
            if(jg(nx,ny,nz)&&mp[nx][ny][nz]=='.'){
                mp[nx][ny][nz]='*';
                a[nx][ny][nz]=a[s.x][s.y][s.z]+1;
                q.push({nx,ny,nz});
            }
        }
    }
    return -2;
}
int main(){
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
             scanf("%s",mp[i][j]);
    printf("%d\n", bfs()+1);
    return 0;
}
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值