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 ...
随机推荐
- JENKINS 打包发布脚本
#!/bin/bash #nohup bash check_new_pkgs_dev.sh & #steps below: ##发布的机器上运行这个脚本 #定时遍历发布包存放路径 #1.遍历所 ...
- CCNP交换实验(5) -- 网关热备冗余
HSRP:1.启用HSRP功能,并设置虚拟地址IP, 1为standby的组号.2.相同组号的路由器属于同一个HSRP组,所有属于同一个HSRP组的路由器的虚拟地址必须一致.3.HSRP的优先级默认为 ...
- 基于visual Studio2013解决C语言竞赛题之1075大数阶乘
题目 解决代码及点评 /************************************************************************/ /* ...
- MySql自己定义排序
查询语句: select id,name,stauts from special where id in (50,51,52,53,54,55) order by FIELD( id ,51,50, ...
- 在github 网页上,删除已经建好的库
在github 上面怎么删除已经建好的库 点击你要删除的库,然后找到Setting 找到如图所示的Delete 在输入框里面输入你要删除的库的名字 最后点击按钮,就可以删掉了
- GCC中初始化函数是怎样被处理的?
本文译至: http://gcc.gnu.org/onlinedocs/gccint/Initialization.html 如我们所知,在GCC通过给代码追加__attribute__((const ...
- Delphi与Vista提供的UAC控制(1-代表资源编号,24-资源类型为RTMAINIFEST,最后用brcc32编译成资源文件)
Vista提供的UAC机制,是Vista的新增功能之一.它的主要目的是防止对于操作系统本身的恶意修 改.如果想对于Vista的 系统设置进行改动,必须通过UAC的验 证才能够进行.通过这样的手段,大大 ...
- Swift - 日期选择控件(UIDatePicker)的用法
1,使用storyboard创建日期选择控件 首先我们将一个UIDatePicker控件和一个按钮直接添加到Main.Storyboard上.该按钮是为了点击时弹出提示框显示当前选择的日期和时间. 同 ...
- Contact类解析
Contact类 public static class Contacts implements BaseColumns, ContactsColumns, ContactOptionsColumns ...
- java OOP及相关基础知识汇总(转)
OOP 对象有三个要素 behavior 接口是怎样的,有什么方法/field可以用? state 调用方法的时候,对象会有什么反应? 只有通过调用方法才能改变一个对象的state identity ...