A计划

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 30466    Accepted Submission(s): 7635

Problem Description

可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在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,再就是#是不浪费时间的

#include<bits/stdc++.h>
using namespace std;#define e exp(1)
#define pi acos(-1)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define ll long long
#define ull unsigned long long
#define mem(a,b) memset(a,b,sizeof(a))
int gcd(int a,int b){return b?gcd(b,a%b):a;}int n,m,t;
char s[2][13][13];
int v[2][13][13],flag;
int d[4][2]={0,1,0,-1,1,0,-1,0};
struct node{int x,y,z,step;
}tmp;
bool check()
{if(tmp.x<0||tmp.x>=n||tmp.y<0||tmp.y>=m) return 0;else if(v[tmp.z][tmp.x][tmp.y]==1)  return 0;else if((s[tmp.z][tmp.x][tmp.y]=='*'))  return 0;else if(s[tmp.z][tmp.x][tmp.y]=='#'&&s[!tmp.z][tmp.x][tmp.y]=='*') return 0;else if(s[tmp.z][tmp.x][tmp.y]=='#'&&s[!tmp.z][tmp.x][tmp.y]=='#') return 0;else return 1;
}
void bfs()
{queue<node> q;tmp.x=0,tmp.y=0,tmp.z=0;tmp.step=0;q.push(tmp);v[0][0][0]=1;while(q.size()){node now=q.front();q.pop();if(now.step>t){flag=0;return ;}if(s[now.z][now.x][now.y]=='P'){flag=1;return ;}for(int i=0; i<4; i++){tmp.x=now.x+d[i][0];tmp.y=now.y+d[i][1];tmp.z=now.z;if(check()){if(s[tmp.z][tmp.x][tmp.y]=='#') {v[tmp.z][tmp.x][tmp.y]=1; tmp.z=!tmp.z; }tmp.step=now.step+1;v[tmp.z][tmp.x][tmp.y]=1;q.push(tmp);}}}
}
int main()
{int T;scanf("%d",&T);while(T--){mem(v,0);flag=0;scanf("%d%d%d",&n,&m,&t);for(int i=0; i<n; i++)scanf("%s",s[0][i]);for(int i=0; i<n; i++)scanf("%s",s[1][i]);bfs();if(flag)puts("YES");else puts("NO");}return 0;
}

hdu2102(bfs)相关推荐

  1. python扫雷 广度优先_Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper)...

    Leetcode之广度优先搜索(BFS)专题-529. 扫雷游戏(Minesweeper) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ary Tre ...

  2. 三十二、图的创建深度优先遍历(DFS)广度优先遍历(BFS)

    一.图的基本介绍 为什么要有图 前面我们学了线性表和树 线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要表示多对多的关系时, 这里我们就用到了图. 图的举例 ...

  3. Java实现算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)

    对算法导论中图的广度优先搜索(BFS)和深度优先搜索(DFS)用Java实现其中的伪代码算法,案例也采用算法导论中的图. import java.util.ArrayList; import java ...

  4. 【洛谷】马的遍历--广度优先搜索(BFS)

    题目描述 传送门:https://www.luogu.com.cn/problem/P1443 有一个n*m的棋盘(1<n,m<=400),在某个点上有一个马,要求你计算出马到达棋盘上任意 ...

  5. 二叉搜索树(BFS)总结

    满二叉树 定义:高度为h,并且由2{h} –1个结点的二叉树,被称为满二叉树. 完全二叉树 定义:一棵二叉树中,只有最下面两层结点的度可以小于2,并且最下一层的叶结点集中在靠左的若干位置上.这样的二叉 ...

  6. 广度优先搜索(BFS)与深度优先搜索(DFS)

    一.广度优先搜索(BFS) 1.二叉树代码 # 实现一个二叉树 class TreeNode:def __init__(self, x):self.val = xself.left = Nonesel ...

  7. 二叉树的深度优先遍历(DFS)与广度优先遍历(BFS)

    二叉树的深度优先遍历(DFS)与广度优先遍历(BFS) 深度优先遍历:从根节点出发,沿着左子树方向进行纵向遍历,直到找到叶子节点为止.然后回溯到前一个节点,进行右子树节点的遍历,直到遍历完所有可达节点 ...

  8. 层层递进——宽度优先搜索(BFS)

    问题引入 我们接着上次"解救小哈"的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLi ...

  9. 从起始点到目标点的最短步数(BFS)

    从起始点到目标点的最短步数(BFS) Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 在古老的魔兽传说中,有两个军团,一 ...

最新文章

  1. python程序不出结果_超详细的Python入门教程,1小时就可以学会
  2. Redis学习资料整理
  3. BeginInvoke与EndInvoke方法解决多线程接收委托返回值问题
  4. [MATLAB调试笔记]Update magnetic field in one step
  5. 2021第一场 | 阿里云高校计划训练营全面升级!0成本体验云计算入门到进阶
  6. 查看某个方法在哪里被调用_MATLAB局部函数公有化的方法: localfunctions
  7. Anaconda 镜像源操作(查看配置删除)
  8. ActiveReports 报表应用教程 (15)---报表换肤
  9. Qt之QFileSystemWatcher
  10. php arrayaccess 二维,PHP数组式访问接口ArrayAccess用法分析
  11. hive 如何将数组转成字符串_Hive函数大全(含例子)之字符串函数(String Functions)...
  12. 防止跨站请求伪造(CSRF)攻击 和 防重复提交 的方法的实现
  13. 10.14-10.20学习总结
  14. 使用WinDbg分析Windows dump文件方法
  15. 分治法 --- 大整数的乘法
  16. redis之SDS字符串,到底高效在哪里?(全面分析)
  17. MBA——mba的9堂课
  18. ☆【容斥原理】【SCOI2010】幸运数字
  19. element-ui 表格合并问题
  20. 逻辑设计基础_芯片设计--TCAM概述

热门文章

  1. Python - 按天算年龄
  2. Unity—AssetBundle的打包及四种加载资源方式
  3. 重装JDK后Tomcat和Eclipse的配置
  4. 转【查看oracle数据库的连接数以及用户 】
  5. Spring MVC 入门
  6. Python:安装dlib库
  7. typedef的用法
  8. 【Windows10下OpenCV 3.4.0 + Visual Studio 2015开发环境的配】
  9. 常见缓存算法和LRU与LFU的c++实现
  10. 内核态与用户态的区别