当前位置: 首页 > news >正文

Dungeon Master(POJ-2251)

题目链接: https://vjudge.net/problem/POJ-2251#author=DeepSeek_zh

作者主页: https://blog.csdn.net/2401_89382924?spm=1011.2266.3001.5343

你被困在一个3D地牢中,需要找到最快的逃生路线!地牢由单位立方体组成,这些立方体可能填充岩石也可能为空。每次向北、南、东、西、上或下移动一个单位需要花费一分钟。不能斜向移动,且迷宫四周都被坚固的岩石包围。

有可能逃脱吗?如果有,需要多长时间?

输入

输入包含若干个地牢描述。每个地牢描述首行是三个整数L、R和C(均不超过30)。
L代表地牢的层数。
R和C代表每层的行数和列数。
随后是L个区块,每个区块包含R行,每行有C个字符。每个字符表示地牢的一个单元。岩石填充的单元用'#'表示,空单元用'.'表示。起始位置用'S'标记,出口用'E'标记。每个层级描述后有一个空行。当L、R和C均为0时输入终止。

输出

每个地牢对应一行输出。如果能够到达出口,输出格式为:

Escaped in x minute(s).


其中x替换为最短逃脱时间。
如果无法逃脱,则输出:

Trapped!

样例

输入
3 4 5
S....
.###.
.##..
###.######
#####
##.##
##...#####
#####
#.###
####E1 3 3
S##
#E#
###0 0 0
输出
Escaped in 11 minute(s).
Trapped!

代码

#include <stdio.h>
#include <string.h>#define MAXN 35
int que[MAXN * MAXN * MAXN][5];
int vis[MAXN][MAXN][MAXN];
char Map[MAXN][MAXN][MAXN];
int px[] = {0, 0,  1,  -1, 0, 0};
int py[] = {1, -1, 0,  0,  0, 0};
int pz[] = {0, 0,  0,  0,  1, -1};
int l, r, c;
char GetChar(void)
{char ch;while ((ch = getchar()) == '\n' || ch == '\r') {}return ch;
}
int bfs(int sx, int sy, int sz, int lx, int ly, int lz)
{//printf("%d %d %d\n\n\n", l, r, c);int head = 0, tail = 1;que[0][1] = sx, que[0][2] = sy, que[0][3] = sz, que[0][4] = 1, vis[sx][sy][sz] = 1;while (head != tail){int fx = que[head][1], fy = que[head][2], fz = que[head][3], fstep = que[head][4];//putchar(Map[fx][fy][fz]);head++;for (int i = 0; i < 6; i++){int tx = fx + px[i], ty = fy + py[i], tz = fz + pz[i];if (tx < 0 || ty < 0 || tz < 0 || tx >= l || ty >= r || tz >= c) continue;if (Map[tx][ty][tz] == '#' || vis[tx][ty][tz] == 1) continue;//printf("%d %d %d\n", tx, ty, tz);que[tail][1] = tx, que[tail][2] = ty, que[tail][3] = tz, que[tail][4] = fstep + 1;vis[tx][ty][tz] = 1;tail++;if (tx == lx && ty == ly && tz == lz) // 到达终点return fstep;}}return -91;
}
int main()
{while (scanf("%d%d%d", &l, &r, &c) == 3 && l && r && c){int sx, sy, sz, lx, ly, lz;memset(que, 0, sizeof que);memset(Map, 0, sizeof Map);memset(vis, 0, sizeof vis);for (int i = 0; i < l; i++)for (int j = 0; j < r; j++)for (int k = 0; k < c; k++){Map[i][j][k] = GetChar(); // 输入字符if (Map[i][j][k] == 'S')sx = i, sy = j, sz = k;if (Map[i][j][k] == 'E')lx = i, ly = j, lz = k;}int ret = bfs(sx, sy, sz, lx, ly, lz);if (ret == -91)printf("Trapped!\n");elseprintf("Escaped in %d minute(s).\n", ret);}return 0;
}

 

 

相关文章:

  • 现代密码学入门 | 现代密码学核心特点介绍
  • DeepSeek-R1 重磅升级,智能体验再进化!
  • antDesignVue中a-upload上传组件的使用
  • 算法打卡第11天
  • 小工具合集
  • 无人机视角海上漂浮物检测与人员救援检测数据集VOC+YOLO格式2903张6类别
  • 2024 CKA模拟系统制作 | Step-By-Step | 18、题目搭建-备份还原Etcd
  • sward V1.1.4版本发布,支持文档审批及文档导出
  • day40python打卡
  • Linux研学-入门命令
  • 经营分析会,财务该怎么做?
  • web自动化-Selenium、Playwright、Robot Framework等自动化框架使用场景优劣对比
  • 从零打造算法题刷题助手:Agent搭建保姆级攻略
  • 【位运算】常见位运算总结
  • Bitlocker密钥提取之SYSTEM劫持
  • C++17原生测试编程实践:现代特性与分支覆盖指南
  • 如何做好一份技术文档:从信息孤岛到知识图谱的进阶之路
  • 深入理解 Git 底层机制:指针(Refs)、提交(Commit)与分支的关系
  • 【Python-Day 20】揭秘Python变量作用域:LEGB规则与global/nonlocal关键字详解
  • 晨控CK-UR12与西门子PLC配置Modbus TCP通讯连接操作手册
  • 网站推广方法主要有哪几种/免费论坛建站系统
  • 做表格的网站/电商代运营公司
  • 如何做产品网站网页/app关键词排名优化
  • 化妆品手机端网站模板/热点新闻事件素材
  • 西青集团网站建设/seo对各类网站的作用
  • 遵义网站建设找工作/网络游戏推广