A计划

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

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
 
 纠结了好久,一开始就定义为只是bfs的简单拓展的,,,可是错了好几次,然后又参考了网上的解题报告,可是大家思路毕竟是不一样的,
只是大致的方向是一样的,然后只好调试了好几次,最后才发现自己错的可悲啊,
大致只要注意:1、遇到‘#’一定要传过去,另一边不能是‘#’和‘*’
                     2、传过去只后记得要记录时间,即,传过去之前的时间;(我就是死在这里)
 
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
#define maxn 15
char a[][maxn][maxn];
int n,m,T,count;
int vis[][maxn][maxn];
int dir[][]={{,},{,},{-,},{,-}}; int chear(int x,int y)
{
if(x<||x>=n||y<||y>=m)
return ;
else
return ;
} struct node
{
int x;
int y;
int layer;//层
int step;
}; queue<node>Q; void bfs()
{ node now,next;
now.x=;
now.y=;
now.layer=;
now.step=;
vis[now.layer][now.x][now.y]=;
Q.push(now);
while(!Q.empty())
{
now=Q.front();
Q.pop();
if(now.step>T)
break ;
if(a[now.layer][now.x][now.y]=='P'&&now.step<=T)
{
printf("YES\n");
return ;
}
for(int i=;i<;i++)
{
next.x=now.x+dir[i][];
next.y=now.y+dir[i][];
next.layer=now.layer;
if(chear(next.x,next.y)||a[next.layer][next.x][next.y]=='*'||vis[next.layer][next.x][next.y])
continue;
next.step=now.step+;
vis[next.layer][next.x][next.y]=;
if(a[next.layer][next.x][next.y]=='#'&&a[!next.layer][next.x][next.y]!='*'&&a[!next.layer][next.x][next.y]!='#')
{
next.layer=-next.layer;
next.step=now.step+;//传输过去记得也要记录时间,不然下一层时间不对,WA了好几次,,,,
vis[next.layer][next.x][next.y]=;
Q.push(next);
}
else if(a[next.layer][next.x][next.y]=='.'||a[next.layer][next.x][next.y]=='P')
Q.push(next);
}
}
printf("NO\n");
}
int main()
{
int C,i,j;
scanf("%d",&C);
while(C--)
{
scanf("%d%d%d",&n,&m,&T);
// getchar();
for(i=;i<n;i++)
cin>>a[][i];
// printf("%c\n",a[0][0][0]);
// for(i=0;i<n;i++)
// cout<<a[0][i]<<endl;
getchar();
for(i=;i<n;i++)
cin>>a[][i];
// for(i=0;i<n;i++)
// cout<<a[1][i]<<endl;
memset(vis,,sizeof(vis));
while(!Q.empty())//Q必须得被清空 勿忘!!!
Q.pop();
bfs();
}
}
/*
5
5 5 14
S*#*.
.#...
.....
****.
...#. ..*.P
#.*..
***..
...*.
*.#..
5 5 14
S*#*.
.#...
.....
****.
...#. ..*.P
#.*..
***..
...**
*.#..
5 5 14
S*#*.
.#...
.....
****.
...#. ..*.P
#.*.*
****.
...*.
*.#..
5 5 14
S*#*.
.#...
.....
****.
...#. ..*..
#.*..
***..
...*.
*.#..
5 5 14
S*#*.
.#...
....#
***..
...#. ..*.P
#.*.*
***.#
...*.
*.#.. */

貌似没什么好说的了,,,一起努力,一起加油!      就这样。

A计划 hdu2102(bfs一般题)的更多相关文章

  1. A计划 hdu2102(BFS)

    A计划 hdu2102 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老.年迈的国 ...

  2. POJ 3984 - 迷宫问题 - [BFS水题]

    题目链接:http://poj.org/problem?id=3984 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, ...

  3. BFS简单题套路_Codevs 1215 迷宫

    BFS 简单题套路 1. 遇到迷宫之类的简单题,有什么行走方向的,先写下面的 声明 ; struct Status { int r, c; Status(, ) : r(r), c(c) {} // ...

  4. POJ-2251 Dungeon Master (BFS模板题)

    You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of un ...

  5. [NOIP补坑计划]NOIP2017 题解&做题心得

    终于做完了…… 场上预计得分:?(省一分数线:295) 由于看过部分题解所以没有预计得分qwq 题解: D1T1 小凯的疑惑 题面 震惊!一道小学奥数题竟难倒无数高中考生! 欢迎大家以各种姿势*和谐* ...

  6. HDU_2102 A计划 【BFS】

    一.题目 HDU2102 二.题意分析 该题其实就是三位空间内的BFS,但比较简单的是,它设置了传送门,可以直接传送上去,需要注意的是 1.到了传送门的时候要重新考虑传送的点的三种情况. (1)若又是 ...

  7. HDU 2102 A计划 (BFS)

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

  8. 【HDU - 2102】A计划(bfs)

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

  9. hdu1240 bfs 水题

    原题链接 思路:水题,直接搜 #include "map" #include "queue" #include "math.h" #incl ...

随机推荐

  1. OSLab文件描述符

      日期:2019/3/24 内容:Linux文件描述符.   一.基本概念 文件描述符(File Descriptor) 一个非负整数.应用程序利用文件描述符来访问文件.打开现存文件或新建文件时,内 ...

  2. [学习笔记]BSGS

    \(\%\%\% Fading\) 早就会了,我最近才理解,当时颓废太多忘学了 1.[SDOI2013]随机数生成器 当天正好在学数列,回来发现用必修五的知识就没了-- 不过特判好烦啊. \(Code ...

  3. 实现域名访问网站—nginx反向代理

    今天在跟项目的时候,是否被耍了三个多小时,最后在我准备号材料准备他人求助的时候,在收集材料的时候,居然访问通了, 别问我为什么,我也不知道 ,哈哈哈哈(苦逼脸...) 分享出来,大家共同学习: 这个是 ...

  4. ST表的原理及其实现

    ST表类似树状数组,线段树这两种算法,是一种用于解决RMQ(Range Minimum/Maximum Query,即区间最值查询)问题的离线算法 与线段树相比,预处理复杂度同为O(nlogn),查询 ...

  5. 大脸猫讲逆向之ARM汇编中PC寄存器详解

    i春秋作家:v4ever 近日,在研究一些开源native层hook方案的实现方式,并据此对ARM汇编层中容易出问题的一些地方做了整理,以便后来人能有从中有所收获并应用于现实问题中.当然,文中许多介绍 ...

  6. nginx root&alias 文件路径配置

    nginx 指定文件路径有两种方式 root 和 alias,root 与 alias 主要区别在于 nginx 如何解释 location 后面的 uri,这会使两者分别以不同的方式将请求映射到服务 ...

  7. Vue2.5开发去哪儿网App 城市列表开发之 Vuex实现数据共享及高级使用

    一,数据共享 1.  安装: npm install vuex --save 2. 在src目录下 新建state文件夹,新建index.js文件 3. 创建一个 store import Vue f ...

  8. 从学CodeSmith谈程序员学习方法

    一直觉得CodeSmith是个好东西,最近正好有点时间来研究下,其实以前也想学习怎么用,在博客园搜一下有很多介绍CodeSmith的文章,我就收藏过一个写得很详细的http://terrylee.cn ...

  9. Android下用Sqlite数据库存储数据

    第一步:  写个类 ,继承 SQLiteOpenHelper public class MyDatabaseOpenHelper extends SQLiteOpenHelper { } 第二步:   ...

  10. setPreferredContentSize error in ios app

    Creating "IOS Project" in xcode 5 causes the following when launching for iPad simulator. ...