uva 532 - Dungeon Master

简介: 点击打开链接 题目意思:给一个三维的地图,然后在地图里面有一个起点S 和终点E ,问是否能够找到一条路径从S到达E。如果能够找到就输出步数,如果不能就输出Trapped!。

点击打开链接


题目意思:给一个三维的地图,然后在地图里面有一个起点S 和终点E ,问是否能够找到一条路径从S到达E。如果能够找到就输出步数,如果不能就输出Trapped!。


解题思路:对于三维的地图和二维的一样,只是我们搜索时候多了两个竖直的方向。就是dir数组为dir[6][3],然后对于求解路径我们一般用BFS,然后用一个flag变量标记是否能够走到E,这样即可.


代码:

//对于求最短路径我们一般是用bfs来做的,对于空间上面的一样的思路
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
const int MAXN = 50;
//定义一个结构体来存放坐标
struct Point {
    int x;
    int y;
    int z;
};
Point p;//p存储目标的坐标
int l, r, c, sum , flag;//flag判断是否又到E
int mark[MAXN][MAXN][MAXN];//标记数组
char maze[MAXN][MAXN][MAXN];//存放地图的数组
//注意方向数组这时候要三维
int dir[6][3] = {
    {1, 0, 0},
    {-1, 0, 0},
    {0, -1, 0},
    {0, 0, 1},
    {0, 1, 0},
    {0, 0, -1}
};
queue<Point>q;//队列

//Bfs函数
void Bfs() {
    int z , i , j;
    if (q.empty())
        return ;
    while (!q.empty()) {
        Point temppoint = q.front();
        q.pop();
        z = temppoint.z;
        i = temppoint.x;
        j = temppoint.y;
        if(z == p.z && i == p.x && j == p.y){//退出条件
             flag = 1; //更新为1
             return;
        }
        for (int t = 0; t < 6; t++) {
            if (z + dir[t][0] < 0 || z + dir[t][0] >= l)
                continue;
            if (i + dir[t][1] < 0 || i + dir[t][1] >= r)
                continue;
            if (j + dir[t][2] < 0 || j + dir[t][2] >= c)
                continue;
            if (maze[z + dir[t][0]][i + dir[t][1]][j + dir[t][2]] == '#')
                continue;
            if (mark[z + dir[t][0]][i + dir[t][1]][j + dir[t][2]] != 0)
                continue;
            if (maze[z + dir[t][0]][i + dir[t][1]][j + dir[t][2]] == '.' || 'E') {
                Point temppoint;
                temppoint.z = z + dir[t][0];
                temppoint.x = i + dir[t][1];
                temppoint.y = j + dir[t][2];
                mark[temppoint.z][temppoint.x][temppoint.y] = mark[z][i][j] + 1;//利用前一个加一方便计算
                q.push(temppoint);
            }
        }
    }
}
  
//找到对应点的函数(找到S,E的坐标)
void find(){
    int z , i , j;
    for (z = 0; z < l; z++) {
        for (i = 0; i < r; i++) {
            for (j = 0; j < c; j++) {
                if (maze[z][i][j] == 'S'){
                    Point temppoint;
                    temppoint.z = z;
                    temppoint.x = i;
                    temppoint.y = j;
                    q.push(temppoint);
                }
                if (maze[z][i][j] == 'E') {
                    p.z = z;
                    p.x = i;
                    p.y = j;
                }
            }
        }
    }
}

//处理函数
void solve() {
    sum = 0;//初始化为0
    flag = 0;//初始化为0
    memset(mark, 0, sizeof (mark));//初始化为0
    while (!q.empty())//队列的清空
        q.pop();
    find();
    Bfs();
    if(flag)//如果到E点更新sum的值
        sum = mark[p.z][p.x][p.y];
    if (sum == 0)
        printf("Trapped!\n");
    else
        printf("Escaped in %d minute(s).\n", sum);
}

//主函数
int main() {
    int i , z;
    while (scanf("%d %d %d%*c", &l, &r, &c) && l && r && c) {//输入格
        for (z = 0; z < l; z++) {
            for (i = 0; i < r; i++)
                gets(maze[z][i]);//直接读入一行字符串
            getchar();//这里一个getchar用来读‘\n’;
        }
        solve();
    }
    return 0;
}


目录
相关文章
|
21小时前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
10天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
4天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
429 191
|
3天前
|
数据采集 消息中间件 人工智能
跨系统数据搬运的全方位解析,包括定义、痛点、技术、方法及智能体解决方案
跨系统数据搬运打通企业数据孤岛,实现CRM、ERP等系统高效互通。伴随数字化转型,全球市场规模超150亿美元,中国年增速达30%。本文详解其定义、痛点、技术原理、主流方法及智能体新范式,结合实在Agent等案例,揭示从数据割裂到智能流通的实践路径,助力企业降本增效,释放数据价值。
|
8天前
|
人工智能 自然语言处理 安全
国内主流Agent工具功能全维度对比:从技术内核到场景落地,一篇读懂所有选择
2024年全球AI Agent市场规模达52.9亿美元,预计2030年将增长至471亿美元,亚太地区增速领先。国内Agent工具呈现“百花齐放”格局,涵盖政务、金融、电商等多场景。本文深入解析实在智能实在Agent等主流产品,在技术架构、任务规划、多模态交互、工具集成等方面进行全维度对比,结合市场反馈与行业趋势,为企业及个人用户提供科学选型指南,助力高效落地AI智能体应用。
|
4天前
|
消息中间件 安全 NoSQL
阿里云通过中国信通院首批安全可信中间件评估
近日,由中国信通院主办的 2025(第五届)数字化转型发展大会在京举行。会上,“阿里云应用服务器软件 AliEE”、“消息队列软件 RocketMQ”、“云数据库 Tair”三款产品成功通过中国信通院“安全可信中间件”系列评估,成为首批获此认证的中间件产品。此次评估覆盖安全可信要求、功能完备性、安全防护能力、性能表现、可靠性与可维护性等核心指标,标志着阿里云中间件产品在多架构适配与安全能力上达到行业领先水平。
313 196