题目链接:

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 1086 动态规划入门(非常规DP10:进攻策略)

    一开始看到题目感觉很难 然后看到题解感觉这题贼简单,我好像想复杂了 就算出每一行最少的资源(完全背包+二分)然后就枚举就好了. #include<cstdio> #include<a ...

  2. CF546E Soldier and Traveling(网络流,最大流)

    CF546E Soldier and Traveling 题目描述 In the country there are \(n\) cities and \(m\) bidirectional road ...

  3. [转] C# HttpWebRequest 绝技

    c# HttpWebRequest与HttpWebResponse绝技    阅读原文 如果你想做一些,抓取,或者是自动获取的功能,那么就跟我一起来学习一下Http请求吧.本文章会对Http请求时的G ...

  4. Linux LVM(逻辑卷管理)

    Lvm基本应用 什么是LVM? LVM 的全称是 Logical Volume Manager.中文为逻辑卷管理.它是Linux对磁盘分区的一种管理机制.它在传统的硬盘(或硬盘分区)和文件系统之间建立 ...

  5. 静态时序分析SAT

    1.   背景 静态时序分析的前提就是设计者先提出要求,然后时序分析工具才会根据特定的时序模型进行分析,给出正确是时序报告. 进行静态时序分析,主要目的就是为了提高系统工作主频以及增加系统的稳定性.对 ...

  6. Scrapy请求传参

    scrapy.Request(url=url, callback=self.parse_item, meta={'item': item}, headers=headers) url: 要请求的地址 ...

  7. df---显示磁盘分区使用空间

    df命令用于显示磁盘分区上的可使用的磁盘空间.默认显示单位为KB.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 语法 df(选项)(参数) 选项 -a或--all:包含全部的文 ...

  8. Linux学习总结(1)——Linux命令大全完整版

    Linux命令大全完整版 目    录I 1. linux系统管理命令1 adduser1 chfn(change finger information)1 chsh(change shell)1 d ...

  9. WPF和WinForm的区别, 数据驱动与事件驱动的优势对比

    Winform中针对界面的元素进行操作, 所有业务都关联在当前窗口的后台, 而在此之前, 无奈你是双击事件的添加方式.还是后台绑定事件的方式, 你都需要给每个元素一个固定规范的名称, 然后进行相关的数 ...

  10. OR1200处理器中Wishbone总线接口模块WB_BIU介绍

    下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 WB_BIU模块是OR1200处理器与外部Wishbone总线连接的接口模块.15.1节给出了WB_BIU模块的对外连接关系,并指出 ...