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 ...
随机推荐
- caioj 1086 动态规划入门(非常规DP10:进攻策略)
一开始看到题目感觉很难 然后看到题解感觉这题贼简单,我好像想复杂了 就算出每一行最少的资源(完全背包+二分)然后就枚举就好了. #include<cstdio> #include<a ...
- CF546E Soldier and Traveling(网络流,最大流)
CF546E Soldier and Traveling 题目描述 In the country there are \(n\) cities and \(m\) bidirectional road ...
- [转] C# HttpWebRequest 绝技
c# HttpWebRequest与HttpWebResponse绝技 阅读原文 如果你想做一些,抓取,或者是自动获取的功能,那么就跟我一起来学习一下Http请求吧.本文章会对Http请求时的G ...
- Linux LVM(逻辑卷管理)
Lvm基本应用 什么是LVM? LVM 的全称是 Logical Volume Manager.中文为逻辑卷管理.它是Linux对磁盘分区的一种管理机制.它在传统的硬盘(或硬盘分区)和文件系统之间建立 ...
- 静态时序分析SAT
1. 背景 静态时序分析的前提就是设计者先提出要求,然后时序分析工具才会根据特定的时序模型进行分析,给出正确是时序报告. 进行静态时序分析,主要目的就是为了提高系统工作主频以及增加系统的稳定性.对 ...
- Scrapy请求传参
scrapy.Request(url=url, callback=self.parse_item, meta={'item': item}, headers=headers) url: 要请求的地址 ...
- df---显示磁盘分区使用空间
df命令用于显示磁盘分区上的可使用的磁盘空间.默认显示单位为KB.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 语法 df(选项)(参数) 选项 -a或--all:包含全部的文 ...
- Linux学习总结(1)——Linux命令大全完整版
Linux命令大全完整版 目 录I 1. linux系统管理命令1 adduser1 chfn(change finger information)1 chsh(change shell)1 d ...
- WPF和WinForm的区别, 数据驱动与事件驱动的优势对比
Winform中针对界面的元素进行操作, 所有业务都关联在当前窗口的后台, 而在此之前, 无奈你是双击事件的添加方式.还是后台绑定事件的方式, 你都需要给每个元素一个固定规范的名称, 然后进行相关的数 ...
- OR1200处理器中Wishbone总线接口模块WB_BIU介绍
下面内容摘自<步步惊芯--软核处理器内部设计分析>一书 WB_BIU模块是OR1200处理器与外部Wishbone总线连接的接口模块.15.1节给出了WB_BIU模块的对外连接关系,并指出 ...