hdu2102(bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102
分析:bfs求最短时间到达'P'点,不过本题有好几个trick,我都踩到了,自己还是太嫩了。。。
注意:可能两层同个位置都是'#',还有经过'#'时只能被传送,不能经过它上下左右移动。。。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 1000000007
#define inf 0x3f3f3f3f
#define N 100010
using namespace std;
int n,m,t;
char s[][][];
struct node
{
int x,y,z,step;
bool operator<(const node &a)const
{
return step>a.step;
}
};
int dx[]={,-,,,,};
int dy[]={,,,-,,};
int dz[]={,,,,,-};
int vis[][][],flag;
node make_node(int a,int b,int c,int d)
{
node temp;
temp.x=a;temp.y=b;
temp.z=c;temp.step=d;
return temp;
}
int judge(int a,int b,int c)
{
return a>=&&a<&&b>=&&b<n&&c>=&&c<m&&!vis[a][b][c]&&s[a][b][c]!='*';
}
void bfs(int xx,int yy,int zz)
{
priority_queue<node>que;
while(!que.empty())que.pop();
memset(vis,,sizeof(vis));
node cur,nxt;
vis[xx][yy][zz]=;
que.push(make_node(xx,yy,zz,));
while(!que.empty())
{
cur=que.top();que.pop();//进入队列的step不同步时,最好用优先队列保证最小步数出队
if(s[cur.x][cur.y][cur.z]=='P')
{
if(cur.step<=t)flag=;
return ;
}
for(int i=;i<;i++)
{
int x=cur.x+dx[i],y=cur.y+dy[i],z=cur.z+dz[i];
if(judge(x,y,z))
{
if(dx[i]&&s[cur.x][cur.y][cur.z]!='#')continue;//该位置可传送
if(dx[i]&&s[x][y][z]=='#')continue;//两边都是传送机
if(s[cur.x][cur.y][cur.z]=='#'&&!dx[i])continue;//这里被坑了好久,不能左右上下移动了
vis[x][y][z]=;
if(dx[i])
que.push(make_node(x,y,z,cur.step));
else
que.push(make_node(x,y,z,cur.step+));
}
}
}
}
int main()
{
int x,y,z,cas;
scanf("%d",&cas);
while(cas--)
{
scanf("%d%d%d",&n,&m,&t);
for(int i=;i<=;i++)
{
for(int j=;j<n;j++)
{
scanf("%s",s[i][j]);
}
}
flag=;
bfs(,,);
if(flag)puts("YES");
else puts("NO");
}
}
hdu2102(bfs)的更多相关文章
- A计划 hdu2102(BFS)
A计划 hdu2102 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老.年迈的国 ...
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- 【算法导论】图的广度优先搜索遍历(BFS)
图的存储方法:邻接矩阵.邻接表 例如:有一个图如下所示(该图也作为程序的实例): 则上图用邻接矩阵可以表示为: 用邻接表可以表示如下: 邻接矩阵可以很容易的用二维数组表示,下面主要看看怎样构成邻接表: ...
- 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...
- 【BZOJ5492】[HNOI2019]校园旅行(bfs)
[HNOI2019]校园旅行(bfs) 题面 洛谷 题解 首先考虑暴力做法怎么做. 把所有可行的二元组全部丢进队列里,每次两个点分别向两侧拓展一个同色点,然后更新可行的情况. 这样子的复杂度是\(O( ...
- 深度优先搜索(DFS)和广度优先搜索(BFS)
深度优先搜索(DFS) 广度优先搜索(BFS) 1.介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索.简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次 ...
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...
- 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...
- 层层递进——宽度优先搜索(BFS)
问题引入 我们接着上次“解救小哈”的问题继续探索,不过这次是用宽度优先搜索(BFS). 注:问题来源可以点击这里 http://www.cnblogs.com/OctoptusLian/p/74296 ...
随机推荐
- java基本数据类型转换成byte[]数组
import java.io.UnsupportedEncodingException; public class ConToByte { /** * double转换byte ...
- Eclipse用法和技巧十六:自动添加未实现方法2
前面一篇文章里面介绍了一种常见的自动添加未实现函数的方法.这里在顺便补充几个方法.第一个方法,看上去有点怪怪的: 步骤一:Source > Clean Up: 步骤二:选择cust ...
- RAD路线规划2016版
http://community.embarcadero.com/article/news/16211-embarcadero-rad-studio-2016-product-approach-and ...
- java之redis篇(spring-data-redis整合) (转)
redis的知识:官网 1,利用spring-data-redis整合 项目使用的pom.xml: <project xmlns="http://maven.apache.org/PO ...
- boost::asio 连接管理11 如何关闭连接
在实际产品运行中,对连接管理有了更新的认识,这里分享一下. shared_ptr管理连接对象的生命周期 shared_ptr的引用计数器决定了连接对象的生命周期.这里我说的连接对象就是在我的前文:ht ...
- 页面爬虫(获取其他页面HTML)加载到自己页面
//前台 <div id="showIframe"></div> $(document).ready(function() { var url = &quo ...
- android launcher开发之图标背景以及默认配置
1:然后我自己看了一下桌面图标的载入过程: 桌面第一次载入时是默认读取一个xml配置文件,完毕配置工作.这个配置文件在Launcher文件夹下, 路径是:\Launcher\res\xml\defau ...
- Visio中添加、移动或删除形状上的连接点的方法
Visio中添加.移动或删除形状上的连接点的方法 利用Visio画图时,学会使用连接点能使你的画图质量和速度大幅度提高.下面在Visio2010中,以一个例子讲述如何使用连接点. 一. 准备 1. 打 ...
- POJ 2186 Popular Cows (强联通)
id=2186">http://poj.org/problem? id=2186 Popular Cows Time Limit: 2000MS Memory Limit: 655 ...
- NFS服务器端配置
服务器端配置1 创建共享目录# mkdir /home/share# chown nobody.nogroup /home/share2 创建或修改/etc/exports 配置文件这个文件的内容非常 ...