可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在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. 蒜头君的旅游计划(DFS)

    马上就要放寒假了,蒜头君已经辛勤的工作一年了,打算和家人一起出去旅游放松放松.有经验的人一定知道,出去旅游前一定要有详细的旅行规划.蒜头君打算旅游 n 个城市,但并不是每条路线的花费都是一样的.蒜头君 ...

  2. 国家重点研发计划“通用三维CAD系统软件产品”项目 正式启动

    2021年3月25日,数码大方(CAXA)牵头承担的2020国家重点研发计划"通用三维CAD系统软件产品"项目启动会在京召开.科技部项目专家.项目牵头单位及参与单位等共同参加了项目 ...

  3. 游戏引擎程序员养成计划

    说的很好,和我走的道路有点不谋而合,文章中提到的书本我基本都知道,很多都看过或者浏览过,英雄所见略同?O(∩_∩)O~ 游戏引擎程序员养成计划 三维图形学:  搞三维图形学首先还是要扎扎实实的先看解析 ...

  4. Codeforces 793b B. Igor and his way to work 觉得大神写的3维bfs太复杂,突然发现这题是连连看算法。

    看大神写的dp[x][y][c]表示的(x,y)位置c方向的三维DFS, 这题说是转不超过两个弯,其实就是连连看. 扫描S和T左右上下达到的最大点. 左右上下都取S和T达到的最小范围. 1.用左右范围 ...

  5. P2802 回家(dfs+三维数组标记+剪枝)

    题目描述 小H在一个划分成了n* m个方格的长方形封锁线上. 每次他能向上下左右四个方向移动一格(当然小H不可以静止不动), 但不能离开封锁线,否则就被打死了. 刚开始时他有满血6点,每移动一格他要消 ...

  6. 一一计划(Day 14)邻接表法存储图,BFS广度优先遍历,DFS深度优先遍历

    邻接表法存储 邻接表发存储需要时无权无向图.用数组+链表的方式完成 数组用来记录地点,链表来记录每一个地点对应的相邻地点 1.构造一个数据结构来存放数组的序号以及指针用来指向链表 2.创造结点,构建链 ...

  7. 【题解】P8817 [CSP-S 2022] 假期计划(bfs,dfs)

    [题解]P8817 [CSP-S 2022] 假期计划 此题作为 CSP-S 的 T1,可以说是相当有难度了.感觉 T1 和 T2 换了个位置.(雾) 我作为场外 VP 选手赛时此题只得了 95pts ...

  8. 算法学习 (门徒计划)3-3 深搜(DFS)与广搜(BFS)及经典问题 学习笔记

    算法学习 (门徒计划)3-3 深搜(DFS)与广搜(BFS)及经典问题 学习笔记 前言 深搜与广搜 搜索的核心概念 问题求解树 搜索剪枝和优化 问题求解树的状态 对比深搜与广搜 DFS-深度(deep ...

  9. 蒜头君的旅游计划--深搜dfs

    马上就要放寒假了,蒜头君已经辛勤的工作一年了,打算和家人一起出去旅游放松放松.有经验的人一定知道,出去旅游前一定要有详细的旅行规划.蒜头君打算旅游 n 个城市,但并不是每条路线的花费都是一样的.蒜头君 ...

最新文章

  1. 安装两个硬盘时应如何跳线?
  2. MFC的消息映射有什么作用
  3. b树与b+树的区别_一文详解 B-树,B+树,B*树
  4. spring 概念理解(资料)
  5. C++(19)--自定义Array,vector练习
  6. 持续集成部署Jenkins工作笔记0021---21.关闭防止跨站点请求伪造
  7. Codevs 3342 绿色通道
  8. pwn环境搭建_[原创]CTF_Pwn环境搭建
  9. ZMQ中线程之间发送命令
  10. 软件测试达内视频笔记(一)
  11. request.getParameter()与request.getParameterValues()
  12. Java获取本周一、上周一、下周一时间
  13. 微信小程序引用Vant组件库message: 没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 `miniprogramRoot` 目录内...
  14. 斜面怎么计算机械效率,初中物理斜面的机械效率学习方法
  15. 【软件安装】spyder汉化包安装
  16. 计算机维修工文明操作,初级计算机维修工操作题.doc
  17. 大数据实验一 关联规则实验题目:蔬菜价格相关性分析
  18. 黄世仁之监听程序前后台切换
  19. 关于2021.3版本的Eclipse汉化以及汉化转回英文的一些问题
  20. 我的不过范德萨就好过放电

热门文章

  1. dockers-系统学习-docker compose服务编排
  2. java 常量字符串过长_编译出错:对于常量池来说,字符串表示的UTF过长,那我想知道,JVM的常量池到底有多大?...
  3. vue项目 打包文件大小分析
  4. 2016如果你想改变命运,请花几分钟读一下:(网上创业赚钱项目)
  5. 前端基础(二)----- CSS初识
  6. Maipo for Mac新浪微博客户端
  7. android otg连接单反
  8. [WARNING] fpm_children_bury()
  9. Prolog学习:用八卦的精神走进Prolog
  10. 神奇的手指——可以取代”切水果“的清屏小软件