NC201613 Jelly
题目
题目描述
Nancy喜欢吃果冻!
Nancy钻进了一个 的果冻里,她想从(1,1,1)一路上、下、左、右、前、后六个方向吃到(n,n,n)。
但果冻毕竟是有许多口味的,标记为*的口味是Nancy不愿意吃的,其余的果冻均标记为.。
Nancy不想吃坏肚子,于是她想尽可能少的吃果冻。
下面给出果冻的情况,请你帮忙计算一下她能吃多少块果冻叭!
输入描述
第一行:一个整数n。
接下来n层,每组n行,每行n列,表示果冻(i,j,k)的情况(如题目描述所述)。
数据满足:,保证果冻(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; }
本文来自博客园,作者:空白菌,转载请注明原文链接:https://www.cnblogs.com/BlankYang/p/16484504.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧