这道题也是一道很基础的bfs,仅仅是图从二维变成三维
在入队列之前进行判断比出队列之后再进行判断会节约运行的时间,因为减少了入队、出队的赋值操作,对于bfs这样低效的算法,在某些题目里面是很容易超时的,所以能够节约点时间还是好的
还有一点就是自己手写的队列要比调用STL的队列要快一些,但是提高了编程复杂度
#include<iostream> #include<cstring> #include<queue> #define MAXN 30+10 using namespace std; struct Point { int x,y,z,step; }; char mat[MAXN][MAXN][MAXN]; char vis[MAXN][MAXN][MAXN]; int bfs(Point start) { vis[start.z][start.x][start.y]=1; queue<Point> q; q.push(start); while(!q.empty()) { Point cur=q.front(); q.pop(); int dir[8][3]={-1,0,0,1,0,0,0,-1,0,0,1,0,0,0,-1,0,0,1}; for(int i=0;i<8;i++) { Point next; next.z=cur.z+dir[i][0]; next.x=cur.x+dir[i][1]; next.y=cur.y+dir[i][2]; next.step=cur.step+1; if(!vis[next.z][next.x][next.y]&&mat[next.z][next.x][next.y]!='#') { if(mat[next.z][next.x][next.y]=='E') return next.step; vis[next.z][next.x][next.y]=1; q.push(next); } } } return -1;//-1代表无法到达 } void init()//初始化,全部设为墙壁 { memset(vis,0,sizeof(vis)); for(int i=0;i<MAXN;i++) for(int j=0;j<MAXN;j++) for(int k=0;k<MAXN;k++) mat[i][j][k]='#'; } int main() { int L,R,C; Point start; while(cin>>L>>R>>C&&L&&R&&C) { init(); for(int i=1;i<=L;i++)//之所以从1开始,是因为外面增加一层墙壁可以省去越界的判断 for(int j=1;j<=R;j++) for(int k=1;k<=C;k++) { cin>>mat[i][j][k]; if(mat[i][j][k]=='S') { start.z=i; start.x=j; start.y=k; start.step=0; } } int ans=bfs(start); if(ans==-1) cout<<"Trapped!"<<endl; else cout<<"Escaped in "<<ans<<" minute(s)."<<endl; } return 0; }
发表评论
-
UVa 10422 Knights in FEN
2012-09-07 08:40 941题目:http://uva.onlinejudge.org/i ... -
UVa 539 The Settlers of Catan
2012-08-31 22:22 28题目:http://uva.onlinejudge.org/i ... -
UVa 301 Transportation
2012-08-31 22:10 34题目:http://uva.onlinejudge.org/i ... -
UVa 639 Don't Get Rooked
2012-08-30 23:01 855题目:http://uva.onlinejudge.org/i ... -
UVa 216 Getting in Line
2012-08-29 20:48 766题目:http://uva.onlinejudge.org/i ... -
UVa 10474 Where is the Marble?
2012-08-28 13:45 885题目:http://uva.onlinejudge.org/i ... -
UVa 592 Island of Logic
2012-08-27 11:05 1685题目:http://uva.onlinejudge ... -
UVa 11205 The broken pedometer
2012-08-25 17:28 1095题目:http://uva.onlinejudge.org/i ... -
UVa 131 The Psychic Poker Player
2012-08-24 22:28 911题目:http://uva.onlinejudge.org/i ... -
UVa 729 The Hamming Distance Problem
2012-08-24 12:18 738题目:http://uva.onlinejudge.org/i ... -
Uva 10098 Generating Fast
2012-08-23 15:28 692题目:http://uva.onlinejudge.org/i ... -
UVa 146 ID Codes
2012-08-20 18:46 806题目:http://uva.onlinejudge.org/i ... -
UVa 10167 Birthday Cake
2012-08-16 20:57 640题目:http://uva.onlinejudge.org/i ... -
UVa 10129 Play on Words
2012-08-15 22:49 1186题目:http://uva.onlinejudge.org/i ... -
UVa 10596 Morning Walk
2012-08-14 22:05 923题目:http://uva.onlinejudge.org/i ... -
Uva 10305 Ordering Tasks
2012-08-13 23:40 700题目:http://uva.onlinejudge.org/i ... -
Uva 10004 Bicoloring
2012-08-13 23:34 917题目:http://uva.onlinejudge.org/i ... -
Uva 439 Knight Moves
2012-08-11 22:24 700题目:http://uva.onlinejudge.org/i ... -
UVa 784 Maze Exploration
2012-08-11 14:09 890题目:http://uva.onlinejudge.org/i ... -
Uva 572 Oil Deposits
2012-08-11 11:43 790题目:http://uva.onlinejudge.org/i ...
相关推荐
《UVA532 Dungeon Master:解密游戏编程的深度探索》 在计算机科学与编程领域,UVA(University of Virginia)在线判题系统是一个深受程序员喜爱的平台,它提供了丰富的算法题目供学习者挑战。其中,编号为532的...
【标题】"POJ2251-Dungeon Master" 是一个来自北京大学在线判题系统POJ(Problem Set)的编程题目。这个题目属于算法竞赛的一部分,挑战者需要编写程序来解决特定的问题,以提高自己的编程能力和算法理解。 【描述...
【Dungeon Master DS-开源】项目是一个专门为Nintendo DS游戏设备设计的开源移植版本,它使得经典的游戏Dungeon Master以及其续作能在NDS平台上运行。这个项目的核心目标是将原版游戏的体验完整地转移到掌上设备,...
《Open Dungeon Master Tools——探索开源世界的奇幻冒险》 在广袤的数字世界中,有一类特殊的工具,它们专为地牢大师(Dungeon Master)设计,致力于减轻他们在构建和管理角色扮演游戏(Role-Playing Game,简称...
《DungeonMaster: 巨大的地牢》是一款基于Java编程语言开发的地牢探索游戏。它构建了一个庞大的、错综复杂的地牢世界,为玩家提供了一次充满挑战与冒险的体验。游戏设计独具匠心,难度随着深入逐渐提升,不仅有...
Problem D【一本通基础广度优先搜索】Dungeon Master Problem E【一本通基础广度优先搜索】Lake Counting 数池塘 Problem F【一本通基础广度优先搜索】走迷宫 Problem G【一本通基础广度优先搜索】抓住那头牛 ...
Dungeon Master's Vault是一个Web服务器,允许您托管自己的D&D 5th Edition角色生成器网站。 入门 要运行自己的Dungeon Master's Vault安装,有两种方法可以执行。 从我们的Docker存储库中提取Docker容器。 建立...
••••积分•隐私•许可 关于您是否在Roll20上玩D&D,但更喜欢使用Dungeon Master's Vault管理角色? VTT Bridge将您的Dungeon Master的Vault角色表无缝连接到Roll20游戏。 主要特征滚动能力检查,武器攻击...
来自FTL / Interplay的经典游戏Dungeon Master的免费实现,适用于GNU / Linux + SDL。 进一步的实现:SDL库支持的其他(首选POSIX)系统。
"JDMG:像游戏一样的Dungeon Master的Javascript" 指的是一种使用JavaScript编写的Dungeon Master(地牢主人)风格的游戏框架。Dungeon Master通常指的是在桌上角色扮演游戏(TRPG)中,负责设计剧情、控制非玩家角色...
在丰富的角色扮演游戏(RPG)世界中,地下城主(Dungeon Master, DM)是故事的编织者,他们构建世界观、设定规则、设计冒险情节,引领玩家探索未知的奇幻领域。而DM Ruler正是一款专为地下城主打造的开源工具,旨在帮助...
首先,我们需要理解“DungeonMaster”在RPG游戏中的角色。在桌面上的角色扮演游戏中,地牢大师是游戏的主持人,他负责构建故事、设定场景和控制非玩家角色(NPCs),以及裁决游戏规则。而DungeonMasterBot则是这一...
这款应用旨在帮助游戏主持人(Dungeon Master,简称DM)更好地组织和管理游戏中的各种元素,从而提升游戏体验。下面将详细介绍这款工具的功能、特点及其在D&D游戏中的应用。 首先,让我们来看看《地牢大师备忘单》...
"GitHub Dungeon Master" 是一个可能与游戏开发或者版本控制相关的项目,从标题来看,我们可以猜测它可能是使用GitHub作为平台,结合了RPG游戏中的“Dungeon Master”概念,即地下城主,通常在桌面角色扮演游戏...
Java应用程序,旨在在针对PDA的AD&D游戏会话中帮助地牢主
《Dungeon Eater》是一款融合了益智与策略元素的迷宫探索游戏,深受玩家喜爱。游戏设计灵感来源于经典的“吃豆人”游戏,但在玩法和机制上进行了创新,为玩家带来全新的挑战与乐趣。 首先,游戏的核心玩法是迷宫...
【DUNGEON-MASTER-WEBGL】是一个基于WebGL技术构建的地下城冒险游戏项目。WebGL是一种在网页浏览器中实现的JavaScript API,用于渲染交互式的2D和3D图形,无需任何插件。这个项目可能是一个用HTML5、CSS3和...
单击“ Dungeon Master.exe”。 享受。 :) 使用项目 下载“ Project src”目录或克隆。 在Unity中,使用选项打开项目。 用作主文件夹“ Project src”目录。 现在您已经准备好,在“资产”中查找场景。 游戏机 ...
在"DungeonGenerator-master"这个项目中,我们可能会找到以下文件和组件: - 地图格子的类定义(如`Grid.cs`) - 房间类(如`Room.cs`)和其生成逻辑 - 连接算法的实现(如`Corridor.cs`) - 地图渲染相关的脚本...
《Python库:dungeon-generator-0.0.2——打造迷宫生成的魔法世界》 在编程领域,Python因其简洁易读的语法和丰富的库支持而备受青睐。今天我们要探讨的是一个名为“dungeon-generator”的Python库,版本为0.0.2,...