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)相关推荐
- 蒜头君的旅游计划(DFS)
马上就要放寒假了,蒜头君已经辛勤的工作一年了,打算和家人一起出去旅游放松放松.有经验的人一定知道,出去旅游前一定要有详细的旅行规划.蒜头君打算旅游 n 个城市,但并不是每条路线的花费都是一样的.蒜头君 ...
- 国家重点研发计划“通用三维CAD系统软件产品”项目 正式启动
2021年3月25日,数码大方(CAXA)牵头承担的2020国家重点研发计划"通用三维CAD系统软件产品"项目启动会在京召开.科技部项目专家.项目牵头单位及参与单位等共同参加了项目 ...
- 游戏引擎程序员养成计划
说的很好,和我走的道路有点不谋而合,文章中提到的书本我基本都知道,很多都看过或者浏览过,英雄所见略同?O(∩_∩)O~ 游戏引擎程序员养成计划 三维图形学: 搞三维图形学首先还是要扎扎实实的先看解析 ...
- Codeforces 793b B. Igor and his way to work 觉得大神写的3维bfs太复杂,突然发现这题是连连看算法。
看大神写的dp[x][y][c]表示的(x,y)位置c方向的三维DFS, 这题说是转不超过两个弯,其实就是连连看. 扫描S和T左右上下达到的最大点. 左右上下都取S和T达到的最小范围. 1.用左右范围 ...
- P2802 回家(dfs+三维数组标记+剪枝)
题目描述 小H在一个划分成了n* m个方格的长方形封锁线上. 每次他能向上下左右四个方向移动一格(当然小H不可以静止不动), 但不能离开封锁线,否则就被打死了. 刚开始时他有满血6点,每移动一格他要消 ...
- 一一计划(Day 14)邻接表法存储图,BFS广度优先遍历,DFS深度优先遍历
邻接表法存储 邻接表发存储需要时无权无向图.用数组+链表的方式完成 数组用来记录地点,链表来记录每一个地点对应的相邻地点 1.构造一个数据结构来存放数组的序号以及指针用来指向链表 2.创造结点,构建链 ...
- 【题解】P8817 [CSP-S 2022] 假期计划(bfs,dfs)
[题解]P8817 [CSP-S 2022] 假期计划 此题作为 CSP-S 的 T1,可以说是相当有难度了.感觉 T1 和 T2 换了个位置.(雾) 我作为场外 VP 选手赛时此题只得了 95pts ...
- 算法学习 (门徒计划)3-3 深搜(DFS)与广搜(BFS)及经典问题 学习笔记
算法学习 (门徒计划)3-3 深搜(DFS)与广搜(BFS)及经典问题 学习笔记 前言 深搜与广搜 搜索的核心概念 问题求解树 搜索剪枝和优化 问题求解树的状态 对比深搜与广搜 DFS-深度(deep ...
- 蒜头君的旅游计划--深搜dfs
马上就要放寒假了,蒜头君已经辛勤的工作一年了,打算和家人一起出去旅游放松放松.有经验的人一定知道,出去旅游前一定要有详细的旅行规划.蒜头君打算旅游 n 个城市,但并不是每条路线的花费都是一样的.蒜头君 ...
最新文章
- 安装两个硬盘时应如何跳线?
- MFC的消息映射有什么作用
- b树与b+树的区别_一文详解 B-树,B+树,B*树
- spring 概念理解(资料)
- C++(19)--自定义Array,vector练习
- 持续集成部署Jenkins工作笔记0021---21.关闭防止跨站点请求伪造
- Codevs 3342 绿色通道
- pwn环境搭建_[原创]CTF_Pwn环境搭建
- ZMQ中线程之间发送命令
- 软件测试达内视频笔记(一)
- request.getParameter()与request.getParameterValues()
- Java获取本周一、上周一、下周一时间
- 微信小程序引用Vant组件库message: 没有找到可以构建的 NPM 包,请确认需要参与构建的 npm 都在 `miniprogramRoot` 目录内...
- 斜面怎么计算机械效率,初中物理斜面的机械效率学习方法
- 【软件安装】spyder汉化包安装
- 计算机维修工文明操作,初级计算机维修工操作题.doc
- 大数据实验一 关联规则实验题目:蔬菜价格相关性分析
- 黄世仁之监听程序前后台切换
- 关于2021.3版本的Eclipse汉化以及汉化转回英文的一些问题
- 我的不过范德萨就好过放电
热门文章
- dockers-系统学习-docker compose服务编排
- java 常量字符串过长_编译出错:对于常量池来说,字符串表示的UTF过长,那我想知道,JVM的常量池到底有多大?...
- vue项目 打包文件大小分析
- 2016如果你想改变命运,请花几分钟读一下:(网上创业赚钱项目)
- 前端基础(二)----- CSS初识
- Maipo for Mac新浪微博客户端
- android otg连接单反
- [WARNING] fpm_children_bury()
- Prolog学习:用八卦的精神走进Prolog
- 神奇的手指——可以取代”切水果“的清屏小软件