称号:hdoj 2102 A计画点击打开链接

意甲冠军:文的就不说了。求救出公主所须要的最短时间,所以用广搜。

分析:读题之后不难做,比一般的题目多了一个条件就是能够传送,那么我们能够在广搜里面加一个传送的条件就好了。

其次这个题目注意有个坑就是假设两边都是传送门的话也不行

还有注意广搜写法,假设把队列定义成全局的话注意清空!

#include <cstdio>
#include <iostream>
#include <queue>
#include <cstring>
#include <algorithm>
#include <stack>
#include <vector>
#include <utility>
#include <cmath>
using namespace std;
const int N = 20;
int n,m,t;
char mp[3][N][N];
int vis[3][N][N];
int tx[5]={0,0,1,-1};
int ty[5]={1,-1,0,0};
struct Node
{
int x,y,z;
int step;
};
queue<Node> q;
int BFS(Node st,Node en)
{
vis[st.x][st.y][st.z]=1;
q.push(st);
while(!q.empty())
{
Node tmp=q.front(),cpp;
q.pop();
if(tmp.x==en.x && tmp.y==en.y && tmp.z==en.z){
return tmp.step;
}
//printf("--%d %d %d %c\n",tmp.x,tmp.y,tmp.z,mp[tmp.x][tmp.y][tmp.z]);
if(mp[tmp.x][tmp.y][tmp.z]=='#')
{
cpp.x=(tmp.x+1)%2;
cpp.y=tmp.y;
cpp.z=tmp.z;
if(vis[cpp.x][cpp.y][cpp.z]==1)
continue;
if(mp[cpp.x][cpp.y][cpp.z]=='*' || mp[cpp.x][cpp.y][cpp.z]=='#')
continue;
q.push(cpp);
vis[cpp.x][cpp.y][cpp.z]=1;
}
else
{
for(int i=0;i<4;i++)
{
cpp.x=tmp.x;
cpp.y=tmp.y+tx[i];
cpp.z=tmp.z+ty[i];
cpp.step=tmp.step+1;
if(mp[cpp.x][cpp.y][cpp.z]=='*')
continue;
if(cpp.y>=0 && cpp.z>=0 && cpp.y<n && cpp.z<m && vis[cpp.x][cpp.y][cpp.z]==0)
{
q.push(cpp);
vis[cpp.x][cpp.y][cpp.z]=1;
}
}
}
}
return -1;
}
int main()
{
//freopen("Input.txt","r",stdin);
int T;
scanf("%d",&T);
while(T--)
{
memset(vis,0,sizeof(vis));
Node st,en;
st.x=0,st.y=0,st.step=0,st.z=0;
scanf("%d%d%d",&n,&m,&t);
for(int k=0;k<2;k++)
for(int i=0;i<n;i++)
for(int j=0;j<m;j++){
cin>>mp[k][i][j];
if(mp[k][i][j]=='P')
en.x=k,en.y=i,en.z=j;
}
//cout<<en.x<<" "<<en.y<<" "<<en.z<<endl;
int ans=BFS(st,en);
if(ans<=t && ans!=-1)
puts("YES");
else
puts("NO");
while(!q.empty()) //注意这里
q.pop();
}
return 0;
}

版权声明:本文博主原创文章。博客,未经同意不得转载。

hdoj 2102 A计画 【BFS】的更多相关文章

  1. HDOJ 2102 A计划(bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 思路分析: <1>搜索方法分析:由于需要寻找最短的找到公主的路径,所以采用bfs搜索 ...

  2. BFS HDOJ 2102 A计划

    题目传送门 题意:中文题面 分析:双层BFS,之前写过类似的题.总结坑点: 1.步数小于等于T都是YES 2. 传送门的另一侧还是传送门或者墙都会死 3. 走到传送门也需要一步 #include &l ...

  3. hdu - 2102 A计划 (简单bfs)

    http://acm.hdu.edu.cn/showproblem.php?pid=2102 题目还是不难,注意起点一定是(0,0,0),然后到达P点时间<=t都可以. 用一个3维字符数组存储图 ...

  4. HDU 2102 A计划(BFS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 题目大意:公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输 ...

  5. HDU - 2102 A计划 【BFS】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2102 思路 题目有两个坑点 0.Output 说 能在T时刻 找到公主 就输出 YES 但实际上 只要 ...

  6. hdu 2102 A计划(BFS,基础)

    题目 //要仔细写的BFS,着重对#穿越的处理哦: //花了几个小时终于把这道简单的BFS给弄好了,我果然还需要增加熟练度,需要再仔细一些: //代码有点乱,但我不想改了,,,,, #include& ...

  7. HDOJ/HDU 1242 Rescue(经典BFS深搜-优先队列)

    Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is ...

  8. HDU 2102 A计划(三维BFS)

    这题太欢乐了......虽然wa了几次,但是想到骑士在两幅图的传送门中传来传去就觉得这骑士太坑了 #include <cstdio> #include <iostream> # ...

  9. hdoj 2102 A计划

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

随机推荐

  1. python转换时间戳和日期时间格式的转换

    [steven@txzxp2 seccenter]$ python Python 2.7.5 (default, Jul  8 2013, 09:48:59)  [GCC 4.8.1 20130603 ...

  2. qt qml中PropertyAnimation的几种使用方法

    qml文章 qt qml中PropertyAnimation的几种使用方法 动画应用场景有以下几种: 首先如果一个Rectangle.动画是要改变它的x和y值 1,Rectangle一旦被创建,就要移 ...

  3. Delphi “Invalid floating point operation.”错误的解决方法(使用System单元提供的Set8087CW函数禁用浮点异常)

    这两天用webbrower写东西,有时候打开SSL加密网站时会出现”Invalid floating point operation.”的错误,上网搜了下,把解决方法贴上. 导致原因 在Delphi2 ...

  4. Opencv各个版本的万能头文件

    每次下载opencv的新版本时,都需要重新写头文件,更改链接库配置,很麻烦有木有?下面这个头文件是我在别人的代码中淘出来的,很不错,与大家分享~(具体作者忘记了,不好意思啊) 作者很巧妙地利用Open ...

  5. 主流JavaScript框架(Dojo、Google Closure、jQuery、Prototype、Mootools和YUI)的分析和对比

    本文主要选取了目前比较流行的JavaScript框架Dojo.Google Closure.jQuery.Prototype.Mootools和YUI进行对比,主要是根据网上的资料整理而成,希望可以供 ...

  6. HDU 1231:最大连续子序列(DP)

    pid=1231">最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  7. HDU 3613 Best Reward 正反两次扩展KMP

    题目来源:HDU 3613 Best Reward 题意:每一个字母相应一个权值 将给你的字符串分成两部分 假设一部分是回文 这部分的值就是每一个字母的权值之和 求一种分法使得2部分的和最大 思路:考 ...

  8. aMule代码分析(2)——CFileDataIO类和CFile类

    aMule中的类很多,Maixee今天选择了两个比较基础的类,均是跟文件操作有关的,分别是CFileDataIO类和CFile类.其中,前者是基类,后者由它派生而出的.具体的继承关系,可以参考这张图: ...

  9. C#的百度地图开发(四)前端显示与定位

    原文:C#的百度地图开发(四)前端显示与定位 有了这些定位信息,那要如何在前端的页面上显示出来呢?这需要用到百度地图的JavaScript的API.下面是示例代码. 前端代码 <%@ Page  ...

  10. 自动更改IP地址反爬虫封锁,支持多线程(转)

    8年多爬虫经验的人告诉你,国内ADSL是王道,多申请些线路,分布在多个不同的电信机房,能跨省跨市更好,我这里写好的断线重拨组件,你可以直接使用. ADSL拨号上网使用动态IP地址,每一次拨号得到的IP ...