hdoj 2102 A计画 【BFS】
称号: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】的更多相关文章
- HDOJ 2102 A计划(bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 思路分析: <1>搜索方法分析:由于需要寻找最短的找到公主的路径,所以采用bfs搜索 ...
- BFS HDOJ 2102 A计划
题目传送门 题意:中文题面 分析:双层BFS,之前写过类似的题.总结坑点: 1.步数小于等于T都是YES 2. 传送门的另一侧还是传送门或者墙都会死 3. 走到传送门也需要一步 #include &l ...
- hdu - 2102 A计划 (简单bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=2102 题目还是不难,注意起点一定是(0,0,0),然后到达P点时间<=t都可以. 用一个3维字符数组存储图 ...
- HDU 2102 A计划(BFS)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 题目大意:公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输 ...
- HDU - 2102 A计划 【BFS】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2102 思路 题目有两个坑点 0.Output 说 能在T时刻 找到公主 就输出 YES 但实际上 只要 ...
- hdu 2102 A计划(BFS,基础)
题目 //要仔细写的BFS,着重对#穿越的处理哦: //花了几个小时终于把这道简单的BFS给弄好了,我果然还需要增加熟练度,需要再仔细一些: //代码有点乱,但我不想改了,,,,, #include& ...
- HDOJ/HDU 1242 Rescue(经典BFS深搜-优先队列)
Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is ...
- HDU 2102 A计划(三维BFS)
这题太欢乐了......虽然wa了几次,但是想到骑士在两幅图的传送门中传来传去就觉得这骑士太坑了 #include <cstdio> #include <iostream> # ...
- hdoj 2102 A计划
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
随机推荐
- Android 表格布局<TableLayout>
表格布局即,tableLayout,表格布局通过行.列的形式来管理UI组件,TablelLayout并不需要明确地声明包含多少行.多少列,而是通过TableRow,以及其他组件来控制表格的行数和列数, ...
- 3.1.2 MVC模式和URL访问
本节课大纲: 一.什么是MVC //了解 M -Model 编写model类 对数据进行操作 使用Model类 来操作数据 V -View 编写html文件,页面呈现 C -Controller 编写 ...
- 获取Jenkins project build结果
当Jenkins管理的build project越来越多的时候,须要脚本收集每一个project的近期一次build结果,从而集中管理.依据业务规则,决定是否重算和何时重算. 以下的命令是利用curl ...
- 分布式发布订阅消息系统Kafka
高吞吐量的分布式发布订阅消息系统Kafka--安装及测试 一.Kafka概述 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览, ...
- leetcode解析回文子串拆分
转载请注明来自souldak,微博:@evagle Given a string s, partition s such that every substring of the partition i ...
- 在VM已安装Android4.4 连接小米手环 网络设置
1.打开一个终端 2.输入su,选择同意 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl5dW4xMjNneA==/font/5a6L5L2T/fon ...
- uva 10003 Cutting Sticks(区间DP)
题目连接:10003 - Cutting Sticks 题目大意:给出一个长l的木棍, 再给出n个要求切割的点,每次切割的代价是当前木棍的长度, 现在要求输出最小代价. 解题思路:区间DP, 每次查找 ...
- hdu3664(递推dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3664 分析:dp[i][j]表示i个数的排列中E值为j的个数.假设现在已有一个E值为j的i的排列,对于 ...
- android中file的使用实例
File是android的4种存储方式的一种.File就是文件的意思一个文件,你无非是想进行读写操作.所以这就用到两个流.一个数输入流,一个是输出流.FileOutstream,和FileInputS ...
- Hulu面试题解答——N位数去除K个数字(解法错误sorry)
给定一个N位数,比如12345,从里面去掉k个数字.得到一个N-k位的数.比如去掉2,4,得到135,去掉1,5.得到234.设计算法.求出全部得到的N-k位数里面最小的那一个. 写的代码例如以下,思 ...