题目链接:

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)的更多相关文章

  1. HDU 2102 A计划(三维BFS)

    这题太欢乐了......虽然wa了几次,但是想到骑士在两幅图的传送门中传来传去就觉得这骑士太坑了 #include <cstdio> #include <iostream> # ...

  2. hdu 2102 A计划 具体题解 (BFS+优先队列)

    题目链接:pid=2102">http://acm.hdu.edu.cn/showproblem.php?pid=2102 这道题属于BFS+优先队列 開始看到四分之中的一个的AC率感 ...

  3. HDU 2102 A计划(两层地图加时间限制加传送门的bfs)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Time Limit: 3000/1000 MS (Java/Others)    Me ...

  4. hdu 2102 A计划

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸 ...

  5. HDU 2102 A计划(BFS/DFS走迷宫)

    A计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  6. HDU 2102 A计划【三维BFS】

    A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...

  7. hdu - 2102 A计划 (简单bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=2102 题目还是不难,注意起点一定是(0,0,0),然后到达P点时间<=t都可以. 用一个3维字符数组存储图 ...

  8. hdu 2102 A计划(双层BFS)(具体解释)

    转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm.hdu.edu.cn/showproblem.php ...

  9. [HDU 2102] A计划(搜索题,典型dfs or bfs)

    A计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

随机推荐

  1. caioj 1082 动态规划入门(非常规DP6:火车票)

    f[i]表示从起点到第i个车站的最小费用 f[i] = min(f[j] + dist(i, j)), j < i 动规中设置起点为0,其他为正无穷 (貌似不用开long long也可以) #i ...

  2. 紫书 例题 10-17 UVa 1639(数学期望+对数保存精度)

    设置最后打开的是盒子1, 另外一个盒子剩下i个 那么在这之前打开了n + n - i次盒子 那么这个时候的概率是C(2 * n - i, n) p ^ (n+1) (1-p)^ (n - i) 那么反 ...

  3. Eclipse导出JavaDoc(并解决中文乱码问题)

    一. 使用Eclipse生成注释文档 使用eclipse生成文档(javadoc)主要有三种方法: 1,在项目列表中按右键,选择Export(导出),然后在Export(导出)对话框中选择java下的 ...

  4. Liquibase+spring 初步使用

    现在的工作的项目中用了liquibase,感觉挺爽的,可以跟踪.管理数据库的重构.这对于很多需求变更较大的项目是非常不错的,特别是互联网的项目.(虽然互联网Nosql已经非常流行,不过俺觉得传统关系型 ...

  5. awk技巧

    1通过awk脚本执行awk程序:awk-f program_file_name input_files #!/bin/awk -f BEGIN { print "What is your n ...

  6. shu_1171 十-&gt;二进制转换(输入输出控制)

    cid=1079&pid=19">http://202.121.199.212/JudgeOnline/problem.php?cid=1079&pid=19 分析:主 ...

  7. 推荐的JavaScript编码规范

    http://www.qdfuns.com/notes/26812/7825414125719306fa409c709ee7b2a3.html

  8. SQLServer 查询最近一天,三天,一周,一月,一季度数据的方法

    三天 select * from T_news where datediff(day,addtime,getdate())<= 2 and datediff(day,addtime,getdat ...

  9. rman 备份并异机恢复

    1.RMAN 备份脚本 RUN { CONFIGURE RETENTION POLICY DAYS; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CO ...

  10. 学习《深度学习与计算机视觉算法原理框架应用》《大数据架构详解从数据获取到深度学习》PDF代码

    <深度学习与计算机视觉 算法原理.框架应用>全书共13章,分为2篇,第1篇基础知识,第2篇实例精讲.用通俗易懂的文字表达公式背后的原理,实例部分提供了一些工具,很实用. <大数据架构 ...