可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在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)的更多相关文章

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

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

  2. HDU 2102 A计划 (三维的迷宫BFS)

    题目链接:pid=2102">传送门 题意: 三维的一个迷宫,起点在第一层的S(0,0,0)处,问是否能在规定的时间内走到第二层的P 处.'*'代表不能走,'.'代表能够走,'#'代表 ...

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

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

  4. kuangbin系列【简单搜索】

    poj-1321棋盘问题[bfs/回溯] Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36385   Accepted:  ...

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

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

  6. hdu 2102 A计划(优先队列+dfs)

    改了好久,上午来实验室打出来了,运行就是不对,一直找啊找!还是没找到,最后突然停电了,打好的代码还没保存呢! 刚才来的时候又重新打了一遍!!!结果一个小小的错误wrong了好久!!! 在dfs值返回时 ...

  7. HDU 2102 A计划(DFS)

    题目链接 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主 ...

  8. 洛谷 P1507 NASA的食物计划 【二维费用背包】 || 【DFS】

    题目链接:https://www.luogu.org/problemnew/show/P1507 题目背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋,因此在各方压力 ...

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

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

随机推荐

  1. c++ deque 容器

    deque (全名 double ended queue)是一种具有队列和栈一样的数据结构. 在c++标准库中几乎和vector容器的接口完全相同,但它和vector 还是有一些细微的差别. 1. d ...

  2. 598. Range Addition II 矩阵的范围叠加

    [抄题]: Given an m * n matrix M initialized with all 0's and several update operations. Operations are ...

  3. 252. Meeting Rooms 区间会议室

    [抄题]: Given an array of meeting time intervals consisting of start and end times [[s1,e1],[s2,e2],.. ...

  4. 2-配置Andriod环境时的错误。。。Theme.AppCompat.Light

    编译或运行时可能会出现错误: Error:Error retrieving parent for item: No resource found that matches the given name ...

  5. SqlServer—大话函数依赖与范式

    说明:数据库中的某些概念真的很让人头疼,概念的东西本来就是很枯燥的,再加上枯燥的学习,那就更加枯燥了.概念这东西,你不理解也能生产东西,经验多了就行,但是为了更深入的学习,你还必须理解.这里,我抛开书 ...

  6. MAC通过SSH使用PEM文件登录

    1.命令如下 ssh -i key.pem ssh -i key.pem root@IP 如果出现报错说明这个问题是文件的权限太大了,需要给小点 sudo chmod 600 key.pem 然后再执 ...

  7. Yii2验证登录得User类

    Yii2中的  Class yii\web\User 是如果进行验证登录,如果我们使用User类验证登录会给我们减少很多麻烦.在此就拿Yii2中自带的登录功能进行说明. 配置.在应用配置文件compo ...

  8. LightOJ 1282 Leading and Trailing (数学)

    题意:求 n^k 的前三位和后三位. 析:后三位,很简单就是快速幂,然后取模1000,注意要补0不全的话,对于前三位,先取10的对数,然后整数部分就是10000....,不用要,只要小数部分就好,然后 ...

  9. .net连接eDirectory,需要安全连接的解决方案

    用C#连接eDirectory ,提示: “这个请求需要一个安全的连接.” 解决办法,eDirectory禁用TLS(这方法比较猥琐) ssh连接到eDirectory服务器上,执行: ldapcon ...

  10. Java变量的修饰符

    1.public public的类.类属变量及方法,包内及包外的任何类均可以访问: 2.protect protected的类.类属变量及方法,包内的任何类,及包外的那些继承了此类的子类才能访问: 3 ...