ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

NC201613 Jelly

2022-07-16 16:31:47  阅读:158  来源: 互联网

标签:int 果冻 Jelly NC201613 pos 110 Nancy now


题目链接

题目

题目描述

Nancy喜欢吃果冻!

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

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

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

输入描述

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

输出描述

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

示例1

输入

2
.*
..
*.
..

输出

4

题解

知识点:BFS。

一个三维迷宫板板题,没啥好说的,第一次写觉得挺好玩qwq。

代码

#include <bits/stdc++.h>

using namespace std;

int n;
char dt[110][110][110];
int step[110][110][110];
int dir[6][3] = { {-1,0,0},{1,0,0},{0,-1,0},{0,1,0},{0,0,-1},{0,0,1} };
struct pos {
    int x, y, z;
};

int bfs() {
    queue<pos> q;
    pos s = { 0,0,0 };
    step[0][0][0] = 1;
    q.push(s);
    while (!q.empty()) {
        pos now_pos = q.front();
        q.pop();
        if (now_pos.x == n - 1 && now_pos.y == n - 1 && now_pos.z == n - 1)
            return step[n - 1][n - 1][n - 1];
        for (int i = 0;i < 6;i++) {
            pos cur_pos;
            cur_pos.x = now_pos.x + dir[i][0];
            cur_pos.y = now_pos.y + dir[i][1];
            cur_pos.z = now_pos.z + dir[i][2];
            if (0 <= cur_pos.x && cur_pos.x < n &&
                0 <= cur_pos.y && cur_pos.y < n &&
                0 <= cur_pos.z && cur_pos.z < n &&
                dt[cur_pos.x][cur_pos.y][cur_pos.z] == '.' &&
                !step[cur_pos.x][cur_pos.y][cur_pos.z]) {
                q.push(cur_pos);
                step[cur_pos.x][cur_pos.y][cur_pos.z] = step[now_pos.x][now_pos.y][now_pos.z] + 1;
            }
        }
    }
    return -1;
}

int main() {
    std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> n;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            cin >> dt[i][j];
    cout << bfs() << '\n';
    return 0;
}

标签:int,果冻,Jelly,NC201613,pos,110,Nancy,now
来源: https://www.cnblogs.com/BlankYang/p/16484504.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有