A计划(三维dfs)
可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。
现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。
Input
输入的第一行C表示共有C个测试数据,每个测试数据的前一行有三个整数N,M,T。 N,M迷宫的大小N*M(1 <= N,M <=10)。T如上所意。接下去的前N*M表示迷宫的第一层的布置情况,后N*M表示迷宫第二层的布置情况。
Output
如果骑士们能够在T时刻能找到公主就输出“YES”,否则输出“NO”。
Sample Input
1
5 5 14
S*#*.
.#...
.....
****.
...#. ..*.P
#.*..
***..
...*.
*.#..
Sample Output
YES
这个题搜的话也不难想象,只不过是三维的,我的代码主要是对P点的判断,第一次wa忘了‘p’也可以走,后两次是忘了,在传送的时候对‘p'点的判断,蠢啊
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#include<cmath>
typedef long long ll;
using namespace std;
char Map[3][15][15];
int vis[3][15][15];
int dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}};
int n,m,time;
int ex,ey,ez;
int flag;
bool check(int x,int y)
{
if(x>=0&&x<n&&y>=0&&y<m)
{
return true;
}
else
{
return false;
}
}
void dfs(int z,int x,int y,int step)
{
if(x==ex&&y==ey&&z==ez)
{
if(step<=time)
{
flag=1;
}
return;
}
for(int t=0;t<4;t++)
{
int xx=x+dir[t][0];
int yy=y+dir[t][1];
if(check(xx,yy)&&(Map[z][xx][yy]=='.'||Map[z][xx][yy]=='P')&&vis[z][xx][yy]==0)
{
vis[z][xx][yy]=1;
dfs(z,xx,yy,step+1);
vis[z][xx][yy]=0;
}
else if(check(xx,yy)&&Map[z][xx][yy]=='#'&&vis[z][xx][yy]==0)
{
if(z==0&&(Map[z+1][xx][yy]=='.'||Map[z+1][xx][yy]=='P')&&vis[z+1][xx][yy]==0)
{
vis[z][xx][yy]=1;
vis[z+1][xx][yy]=1;
dfs(z+1,xx,yy,step+1);
vis[z+1][xx][yy]=0;
vis[z][xx][yy]=0;
}
else if(z==1&&(Map[z-1][xx][yy]=='.'||Map[z-1][xx][yy]=='P')&&vis[z-1][xx][yy]==0)
{
vis[z-1][xx][yy]=1;
vis[z][xx][yy]=1;
dfs(z-1,xx,yy,step+1);
vis[z-1][xx][yy]=0;
vis[z][xx][yy]=0;
}
}
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
flag=0;
int sx,sy,sz;
cin>>n>>m>>time;
memset(vis,0,sizeof(vis));
getchar();
for(int t=0;t<n;t++)
{
scanf("%s",Map[0][t]);
}
for(int t=0;t<n;t++)
{
scanf("%s",Map[1][t]);
}
for(int t=0;t<n;t++)
{
for(int j=0;j<m;j++)
{
if(Map[0][t][j]=='P')
{
ez=0;
ex=t;
ey=j;
}
if(Map[0][t][j]=='S')
{
sz=0;
sx=t;
sy=j;
}
}
}
for(int t=0;t<n;t++)
{
for(int j=0;j<m;j++)
{
if(Map[1][t][j]=='P')
{
ez=1;
ex=t;
ey=j;
}
if(Map[1][t][j]=='S')
{
sz=1;
sx=t;
sy=j;
}
}
}
vis[sz][sx][sy]=1;
dfs(sz,sx,sy,0);
if(flag==1)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
return 0;
}
A计划(三维dfs)的更多相关文章
- 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)
题目链接:pid=2102">传送门 题意: 三维的一个迷宫,起点在第一层的S(0,0,0)处,问是否能在规定的时间内走到第二层的P 处.'*'代表不能走,'.'代表能够走,'#'代表 ...
- HDU 2102 A计划(三维BFS)
这题太欢乐了......虽然wa了几次,但是想到骑士在两幅图的传送门中传来传去就觉得这骑士太坑了 #include <cstdio> #include <iostream> # ...
- kuangbin系列【简单搜索】
poj-1321棋盘问题[bfs/回溯] Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36385 Accepted: ...
- [HDU 2102] A计划(搜索题,典型dfs or bfs)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdu 2102 A计划(优先队列+dfs)
改了好久,上午来实验室打出来了,运行就是不对,一直找啊找!还是没找到,最后突然停电了,打好的代码还没保存呢! 刚才来的时候又重新打了一遍!!!结果一个小小的错误wrong了好久!!! 在dfs值返回时 ...
- HDU 2102 A计划(DFS)
题目链接 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主 ...
- 洛谷 P1507 NASA的食物计划 【二维费用背包】 || 【DFS】
题目链接:https://www.luogu.org/problemnew/show/P1507 题目背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋,因此在各方压力 ...
- HDU 2102 A计划【三维BFS】
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...
随机推荐
- 面试题:volatile关键字的作用、原理
在只有双重检查锁,没有volatile的懒加载单例模式中,由于指令重排序的问题,我确实不会拿到两个不同的单例了,但我会拿到“半个”单例. 而发挥神奇作用的volatile,可以当之无愧的被称为Java ...
- win32多线程 (二)线程同步之临界区 (critical sections)
所谓critical sections 意指一小块“用来处理一份被共享之资源”的程序代码.你可能必须在程序的许多地方处理这一块可共享的资源.所有这些程序代码可以被同一个critical sectio ...
- Luogu 4213 【模板】杜教筛(Sum)
当作杜教筛的笔记吧. 杜教筛 要求一个积性函数$f(i)$的前缀和,现在这个东西并不是很好算,那么我们考虑让它卷上另外一个积性函数$g(i)$,使$(f * g)$的前缀和变得方便计算,然后再反推出这 ...
- CF 961G Partitions
推不动式子 我们考虑每一个$w_i$对答案的贡献,因为题目中定义集合的价值为$W(S) = \left | S \right |\sum_{x \in S}w_x$,这个系数$\left | S \r ...
- spark源码阅读之network(3)
TransportContext用来创建TransportServer和TransportclientFactory,同时使用TransportChannelHandler用来配置channel的pi ...
- ASP.NET框架获取数据字典数据做成树的格式
private List<TreeEntity> treeList = new List<TreeEntity>();//创建一个树的List集合 public ActionR ...
- ThinkPHP3.2.3完整版中对Auth.class.php的使用
一,先创建数据表 1.think_auth_rule,规则表 id:主键, name:规则唯一标识, title:规则中文名称 status 状态:为1正常,为0禁用, condition:规则表达式 ...
- 将“100px” 转换为100
parseInt("100px") //结果是100
- 转:[python] pip 升级所有的包
pip 当前内建命令并不支持升级所有已安装的Python模块. 列出当前安装的包: pip list 列出可升级的包: pip list --outdate 升级一个包: pip install -- ...
- 用firebug 进行表单自定义提交
在一些限制网页功能的场合,例如,防止复制内容,防止重复提交,限制操作的时间段/用户等,网页上一些按钮是灰化的(禁用的),这通常是通过设置元素的 disable属性来实现的.但在后台并没有做相应的功能限 ...