HDU 2102 A计划 (三维的迷宫BFS)
题目链接: pid=2102">传送门
题意:
三维的一个迷宫,起点在第一层的S(0,0,0)处,问是否能在规定的时间内走到第二层的P
处。'*'代表不能走,'.'代表能够走,'#'代表传送门,这里有一个trick,走到传送门的时
候必需要传送。之前没有注意到WA了非常多遍。
并且在初始的时候能够对地图进行一下处理,('*','#'),('#','*'),('#','#')这种肯定
是不能够走的,所以能够把他们都变成'*'
代码例如以下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std; const int maxn = 50; char mp[2][maxn][maxn]; int vis[2][maxn][maxn]; int dx[4]= {1,-1,0,0};
int dy[4]= {0,0,-1,1}; int n,m,limit; struct nod {
int x,y,z;
int step;
nod() {}
nod(int _x,int _y,int _z):x(_x),y(_y),z(_z) {}
}; bool check(nod tmp){
if(vis[tmp.z][tmp.x][tmp.y]) return false;
if(tmp.x>=0&&tmp.x<n&&tmp.y>=0&&tmp.y<m&&mp[tmp.z][tmp.x][tmp.y]!='*') return true;
return false;
} bool bfs() {
nod st=nod(0,0,0);
vis[0][0][0]=1;
st.step=0;
queue<nod> Q;
Q.push(st);
while(!Q.empty()) {
nod tmp = Q.front();
//cout<<tmp.z<<" "<<tmp.x<<" "<<tmp.y<<" "<<tmp.step<<endl;
Q.pop();
if(mp[tmp.z][tmp.x][tmp.y]=='P'&&tmp.step<=limit) {
return true;
} else if(mp[tmp.z][tmp.x][tmp.y]=='P') {
return false;
}
for(int i=0; i<4&&mp[tmp.z][tmp.x][tmp.y]!='#'; i++) {
nod top;
top.x=tmp.x+dx[i],top.y=tmp.y+dy[i],top.z=tmp.z,top.step=tmp.step+1;
if(check(top)){
Q.push(top);
vis[top.z][top.x][top.y]=1;
}
}
if(mp[tmp.z][tmp.x][tmp.y]=='#'){
tmp.z^=1;
Q.push(tmp);
vis[tmp.z][tmp.x][tmp.y]=1;
}
}
return false;
} int main() {
int t;
scanf("%d",&t);
while(t--) {
scanf("%d%d%d",&n,&m,&limit);
for(int i=0; i<n; i++)
scanf("%s",mp[0][i]);
for(int i=0; i<n; i++)
scanf("%s",mp[1][i]);
for(int i=0; i<n; i++) {
for(int j=0; j<m; j++) {
if(mp[0][i][j]=='#'&&mp[1][i][j]=='#')
mp[0][i][j]=mp[1][i][j]='*';
if(mp[0][i][j]=='#'&&mp[1][i][j]=='*')
mp[0][i][j]=mp[1][i][j]='*';
if(mp[0][i][j]=='*'&&mp[1][i][j]=='#')
mp[0][i][j]=mp[1][i][j]='*';
}
}
memset(vis,0,sizeof(vis));
if(bfs()) puts("YES");
else puts("NO");
}
return 0;
}
HDU 2102 A计划 (三维的迷宫BFS)的更多相关文章
- HDU 2102 A计划(三维BFS)
这题太欢乐了......虽然wa了几次,但是想到骑士在两幅图的传送门中传来传去就觉得这骑士太坑了 #include <cstdio> #include <iostream> # ...
- hdu 2102 A计划 具体题解 (BFS+优先队列)
题目链接:pid=2102">http://acm.hdu.edu.cn/showproblem.php?pid=2102 这道题属于BFS+优先队列 開始看到四分之中的一个的AC率感 ...
- HDU 2102 A计划(两层地图加时间限制加传送门的bfs)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Time Limit: 3000/1000 MS (Java/Others) Me ...
- hdu 2102 A计划
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸 ...
- HDU 2102 A计划(BFS/DFS走迷宫)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- HDU 2102 A计划【三维BFS】
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...
- hdu - 2102 A计划 (简单bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=2102 题目还是不难,注意起点一定是(0,0,0),然后到达P点时间<=t都可以. 用一个3维字符数组存储图 ...
- hdu 2102 A计划(双层BFS)(具体解释)
转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm.hdu.edu.cn/showproblem.php ...
- [HDU 2102] A计划(搜索题,典型dfs or bfs)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
随机推荐
- md5sum---文件校验和
md5sum命令采用MD5报文摘要算法(128位)计算和检查文件的校验和.一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行. MD5算法常常被用来验证网络文件传输的完 ...
- 洛谷 P2014 选课 && caioj 1108 树形动态规划(TreeDP)3:选课
这里的先后关系可以看成节点和父亲的关系 在树里面,没有父亲肯定就没有节点 所以我们可以先修的看作父亲,后修的看作节点 所以这是一颗树 这题和上一道题比较相似 都是求树上最大点权和问题 但这道题是多叉树 ...
- 如何使用Java创建Excel(.xls 和 .xlsx)文件 并写入数据
1,需要依赖的jar包, <!-- POI(operate excel) start --> <!-- the version of the following POI packag ...
- Myeclipse学习总结(4)——Eclipse常用开发插件
(1) AmaterasUML 介绍:Eclipse的UML插件,支持UML活动图,class图,sequence图,usecase图等:支持与Java class/interf ...
- BNUOJ 4049 四叉树
四叉树 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: Ma ...
- 数据库中Select For update语句的解析
----------- Oracle -----------------– Oracle 的for update行锁 键字: oracle 的for update行锁 SELECT-FOR UPDAT ...
- 零基础学python-5.6 数字位操作与其它工具
1.位运算 python能够把整数当成二进制位来对待 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/ ...
- POJ 3670 Eating Together(LIS)
Description The cows are so very silly about their dinner partners. They have organized themselves i ...
- Cookie与Session的区别与联系及生命周期
Cookie与Session的区别与联系及生命周期 一.Session与Cookie介绍 这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会 ...
- 有关R6034错误的思考
作者:朱金灿 来源:http://blog.csdn.net/clever101 我们有时会遇到R6034错误,工程明明编译通过,但是运行时却出现: 网上的解决办法很多,但是有效的不多,特别是对阐述这 ...