这道题的题意简单来说:就是在3D迷宫里找出口,也就是三维地图,需要用到三维数组

由于本人写代码极易出错,所以在输入三维数组的时候修改了c(column,即列)的值,重复定义了没看到==,后面改成定义成全局变量就没问题了=

除去粗心大意,这道题也可说是模板题了

这道题的代码dfs部分,写得比较清晰,比较适合初学者理解,因为我也是初学者==,感觉整理的还可哈哈hh~~

好了不多说,上代码叭

 

附上一张谷歌翻译:

 DFS搜索法:

  1 #include<iostream>
2 #include<queue>
3 #include<stdio.h>
4 #include<string.h>
5 using namespace std;
6
7 int l,r,c,vis[35][35][35];
8 char mp[35][35][35];
9
10
11 int fx[6]={1,0,-1,0,0,0};
12 int fy[6]={0,1,0,-1,0,0};
13 int fz[6]={0,0,0,0,1,-1};
14
15 struct node
16 {
17 int x,y,z;
18 int ant;
19 }now,next,s,e;
20
21 bool check(int x,int y,int z)
22 {
23 if(mp[x][y][z]!='#' && !vis[x][y][z] && x>=0 && x<l && y>=0 && y<r && z>=0 && z<c)
24 return 1;
25 return 0;
26 }
27
28 void bfs()
29 {
30 queue<node> q;
31 q.push(s);
32 while(q.size())
33 {
34 now=q.front();
35 q.pop();
36 // if(now.x==e.x && now.y==e.y && now.z==e.z)
37 if(mp[now.x][now.y][now.z]=='E') //找到终点E终止
38 {
39 return ;
40 }
41 else
42 {
43 for(int i=0;i<6;i++)
44 {
45 next.x = now.x+fx[i];//now.x替换了x
46 next.y = now.y+fy[i];
47 next.z = now.z+fz[i];
48 if(check(next.x,next.y,next.z))
49 {
50 vis[next.x][next.y][next.z]=1;
51 next.ant=now.ant+1;
52 q.push(next);
53 }
54 }
55 }
56 }
57 }
58
59 int main()
60 {
61 ios_base::sync_with_stdio(false);
62 cin.tie(0);
63
64 while(cin>>l>>r>>c && l+r+c)
65 {
66 memset(vis,0,sizeof(vis));
67 memset(mp,0,sizeof(mp));
68 for(int i=0;i<l;i++)
69 {
70 for(int j=0;j<r;j++)
71 {
72 for(int k=0;k<c;k++)
73 {
74 cin>>mp[i][j][k];
75 if(mp[i][j][k]=='S')
76 {
77 s.x=i;
78 s.y=j;
79 s.z=k;
80 s.ant=0;//直接存入全局变量的结构体
81 }
82 if(mp[i][j][k]=='E')
83 {
84 e.x=i;
85 e.y=j;
86 e.z=k;
87 }
88 }
89 }
90 }
91 vis[s.x][s.y][s.z]=1;
92 bfs();//找路
93 if(now.ant)
94 {
95 cout<<"Escaped in "<<now.ant<<" minute(s)."<<endl;
96 }
97 else
98 {
99 cout<<"Trapped!"<<endl;
100 }
101 }
102 return 0;
103 }

/*都在注释里咯,第一次多指教了~~*/

**

Dungeon Master 题解的更多相关文章

  1. POJ P2251 Dungeon Master 题解

    深搜,只不过是三维的. #include<iostream> #include<cstring> #include<cstdio> #include<algo ...

  2. POJ 2251 Dungeon Master(地牢大师)

    p.MsoNormal { margin-bottom: 10.0000pt; font-family: Tahoma; font-size: 11.0000pt } h1 { margin-top: ...

  3. POJ:Dungeon Master(三维bfs模板题)

    Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16748   Accepted: 6522 D ...

  4. POJ2251 Dungeon Master —— BFS

    题目链接:http://poj.org/problem?id=2251 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  5. 棋盘问题(DFS)& Dungeon Master (BFS)

    1棋盘问题 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的 ...

  6. POJ 2251 Dungeon Master(3D迷宫 bfs)

    传送门 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 28416   Accepted: 11 ...

  7. poj 2251 Dungeon Master

    http://poj.org/problem?id=2251 Dungeon Master Time Limit: 1000MS   Memory Limit: 65536K Total Submis ...

  8. Dungeon Master 分类: 搜索 POJ 2015-08-09 14:25 4人阅读 评论(0) 收藏

    Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20995 Accepted: 8150 Descr ...

  9. POJ 2251 Dungeon Master --- 三维BFS(用BFS求最短路)

    POJ 2251 题目大意: 给出一三维空间的地牢,要求求出由字符'S'到字符'E'的最短路径,移动方向可以是上,下,左,右,前,后,六个方向,每移动一次就耗费一分钟,要求输出最快的走出时间.不同L层 ...

  10. UVa532 Dungeon Master 三维迷宫

        学习点: scanf可以自动过滤空行 搜索时要先判断是否越界(L R C),再判断其他条件是否满足 bfs搜索时可以在入口处(push时)判断是否达到目标,也可以在出口处(pop时)   #i ...

随机推荐

  1. 设计模式学习-使用go实现解释器模式

    解释器模式 定义 优点 缺点 适用范围 代码实现 参考 解释器模式 定义 解释器模式(interpreter):给定一种语言,定义它的文法的一种表示,并定一个解释器,这个解释器使用该表示来解释语言中的 ...

  2. 错误的daemon.json配置,导致docker容器启动失败 Failed to start Docker Application Container Engine

    docker学习-配置错误的源 问题点剖析 参考 docker学习-配置错误的源 问题点剖析 使用docker安装了nginx,编写Dockerfile,映射端口,终于跑起来了.但是,当我重启服务器, ...

  3. 2.6 CE修改器:代码注入功能

    从本关开始,各位会初步接触到CE的反汇编功能,这也是CE最强大的功能之一.在第6关的时候我们说到指针的找法,用基址定位动态地址.但这一关不用指针也可以进行修改,即使对方是动态地址,且功能更加强大.代码 ...

  4. Python 实现Web容器指纹识别

    当今的Web安全行业在进行渗透测试时普遍第一步就是去识别目标网站的指纹,从而进一步根据目标框架进行针对性的安全测试,指纹识别的原理其实很简单,目前主流的识别方式有下面这几种. 1.识别特定网页中的关键 ...

  5. json扩展之自定义序列化方式

    简介:由于json.dumps() 只能序列化Python基本数据类型,如果我们想要在数据中掺杂时间对象,或者自定义类的对象则会造成序列化数据的失败,因此json.dumps() 提供了一个属性 cl ...

  6. js转化文章发布于几天几小时几分钟前

    alert(dateFormat('2020-07-08 11:32:44')); function dateFormat(d1) { var dateEnd = new Date();//获取当前时 ...

  7. Flutter聊天室|dart+flutter仿微信App界面|flutter聊天实例

    一.项目概述 flutter-chatroom是采用基于flutter+dart+chewie+image_picker+photo_view等技术跨端开发仿微信app界面聊天室项目.实现了消息发送/ ...

  8. Asp .Net Core 系列:Asp .Net Core 集成 NLog

    简介 NLog是一个基于.NET平台编写的日志记录类库,它可以在应用程序中添加跟踪调试代码,以便在开发.测试和生产环境中对程序进行监控和故障排除.NLog具有简单.灵活和易于配置的特点,支持在任何一种 ...

  9. Kettle如何连接SQL Server和问题处理

    简介 Kettle(也称为 Pentaho Data Integration)是一款开源的 ETL(Extract, Transform, Load)工具,由 Pentaho 开发.ETL 是指从一个 ...

  10. logging --- Python 的日志记录工具

    logging --- Python 的日志记录工具 源代码: Lib/logging/__init__.py Important 此页面仅包含 API 参考信息.教程信息和更多高级用法的讨论,请参阅 ...