HDU 2102 A计划(BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102
题目大意:公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。每个测试数据的前一行有三个整数N,M,T。 N,M迷宫的大小N*M(1 <= N,M <=10)。T如上所意。接下去的前N*M表示迷宫的第一层的布置情况,后N*M表示迷宫第二层的布置情况。如果骑士们能够在T时刻能找到公主就输出“YES”,否则输出“NO”。
解题思路:em....还是bfs,只是可以通过‘#’上下传送,其他都差不多。需要注意:当传送过去是‘*’(墙),或者传送过去是‘#’(传送机)这两种都算是传送失败了。
代码:
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int N=; int m,n,T;
int d[][]={{,},{,-},{,},{-,}};
char map[N][N][];
int vis[N][N][]; struct node{
int x,y,z,step;
}pre,now; bool bfs(){
queue<node>q;
now.x=now.y=now.z=;
now.step=;
q.push(now);
while(!q.empty()){
pre=q.front();
q.pop();
for(int i=;i<;i++){
int xx=pre.x+d[i][];
int yy=pre.y+d[i][];
int zz=pre.z;
int t=pre.step+;
if(xx<||yy<||zz<||xx>n||yy>m||zz>||vis[xx][yy][zz]||map[xx][yy][zz]=='*')
continue;
vis[xx][yy][zz]=;
if(map[xx][yy][zz]=='#'){
if(zz==)
zz++;
else
zz--;
//注意除了墙,如果另一层是传送机也不行,传来传去无限循环啊~
if(vis[xx][yy][zz]||map[xx][yy][zz]=='*'||map[xx][yy][zz]=='#')
continue;
vis[xx][yy][zz]=;
}
if(map[xx][yy][zz]=='P'){
if(t<=T)
return true;
return false;
}
now.x=xx;
now.y=yy;
now.z=zz;
now.step=t;
q.push(now);
}
}
return false;
} int main(){
int t;
scanf("%d",&t);
while(t--){
memset(vis,,sizeof(vis));
scanf("%d%d%d",&n,&m,&T);
for(int k=;k<=;k++){
if(k!=)
getchar();
for(int i=;i<=n;i++){
getchar();
for(int j=;j<=m;j++){
scanf("%c",&map[i][j][k]);
}
}
}
if(bfs())
puts("YES");
else
puts("NO");
}
return ;
}
HDU 2102 A计划(BFS)的更多相关文章
- 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
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- HDU - 2102 A计划 (BFS) [kuangbin带你飞]专题二
思路:接BFS判断能否在限制时间内到达公主的位置,注意如果骑士进入传送机就会被立即传送到另一层,不会能再向四周移动了,例如第一层的位置(x, y, 1)是传送机,第二层(x, y, 2)也是传送机,这 ...
- HDU 2102 A计划 (BFS或DFS)
题意:中文题. 析:是一个简单的搜索,BFS 和 DFS都可行, 主要是这个题有一个坑点,那就是如果有一层是#,另一个层是#或者*,都是过不去的,就可以直接跳过, 剩下的就是一个简单的搜索,只不过是两 ...
- HDU 2102 A计划(两层地图加时间限制加传送门的bfs)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Time Limit: 3000/1000 MS (Java/Others) Me ...
- hdu 2102 A计划
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸 ...
- hdu - 2102 A计划 (简单bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=2102 题目还是不难,注意起点一定是(0,0,0),然后到达P点时间<=t都可以. 用一个3维字符数组存储图 ...
- hdu 2102 A计划(双层BFS)(具体解释)
转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm.hdu.edu.cn/showproblem.php ...
- HDU - 2102 A计划 【BFS】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2102 思路 题目有两个坑点 0.Output 说 能在T时刻 找到公主 就输出 YES 但实际上 只要 ...
随机推荐
- Codeforces 19.E Fairy
E. Fairy time limit per test 1.5 seconds memory limit per test 256 megabytes input standard input ou ...
- Uiautomator 快速调试
UiAutomatorHelper使用 1.介绍: 他是一种可以快速调试的方法:其本身也是java问津相当于自动化脚本,查看该文件,其主要实现的功能如下 1.创建bu ...
- centos7通过yum安装MySQL
一:去官网查看最新安装包 https://dev.mysql.com/downloads/repo/yum/ 二:下载MySQL源安装包 wget http://dev.mysql.com/get/m ...
- (转)javap 指令集
栈和局部变量操作将常量压入栈的指令aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型 ...
- codevs 1492 探案第二部
1492 探案第二部 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 我们伟大的 Sherlock·Holmes 先生最近遇上了一件相当棘手的案子,随 ...
- 51 nod 1109 01组成的N的倍数
1109 01组成的N的倍数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 给定一个自然数N,找出一个M,使得M > 0且M是N的倍数,并且 ...
- 其他:strtok和sscanf结合输入读取一行整数
gets(buf); int v; char *p = strtok(buf," "); while(p) { sscanf(p,"%d",&v); p ...
- 课程设计——利用信号量实现哲学家进餐问题(JAVA)
package cn.Douzi.PhiEat; /** * 表示筷子的类 */ public class Chopstick{ /** * 表示筷子是否可用 */ private volatile ...
- js javascript变量提升
var:变量提升(无论声明在何处,都会被提至其所在作用域的顶部) let:无变量提升(所在的块内,未到let声明时(即let声明之前),是无法访问该变量的(not defined)),let变量不能重 ...
- Logitech K810 + Ubuntu
The Logitech K810 is a nice keyboard, but it does not work with Ubuntu out of the box. Still contrar ...