题目:

可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老。年迈的国王正是心急如焚,告招天下勇士来拯救公主。不过公主早已习以为常,她深信智勇的骑士LJ肯定能将她救出。 
现据密探所报,公主被关在一个两层的迷宫里,迷宫的入口是S(0,0,0),公主的位置用P表示,时空传输机用#表示,墙用*表示,平地用.表示。骑士们一进入时空传输机就会被转到另一层的相对位置,但如果被转到的位置是墙的话,那骑士们就会被撞死。骑士们在一层中只能前后左右移动,每移动一格花1时刻。层间的移动只能通过时空传输机,且不需要任何时间。

思路:

填坑填坑了!!!!

其实这题只用一个BFS就搞定了,在状态点里边多加一个属性表示这个状态在哪一层里边,就可以了。

代码:

#include <bits/stdc++.h>
#include <iostream>
#define FRE() freopen("in.txt","r",stdin) using namespace std;
const int maxn = ;
int dx[]= {,,-,};
int dy[]= {,-,,};
int vis[][maxn][maxn];
char mp[][maxn][maxn];
int n,m,t;
struct Node
{
int x,y,lev,c;
}; bool isin(int x,int y)
{
return x>=&&x<n&&y>=&&y<m;
} bool BFS()
{
queue<Node> que;
vis[][][] = ;
que.push(Node{,,,});
while(!que.empty())
{
Node p = que.front();
que.pop();
if(mp[p.lev][p.x][p.y]=='P' && p.c<=t)
return true;
for(int i=; i<; i++)
{
int tx = p.x+dx[i],ty = p.y+dy[i];
if(isin(tx,ty) && mp[p.lev][tx][ty]!='*' && !vis[p.lev][tx][ty])
{
if(mp[p.lev][tx][ty]=='P'||mp[p.lev][tx][ty]=='.')//同一层中进行遍历
{
vis[p.lev][tx][ty] = ;
que.push(Node{tx,ty,p.lev,p.c+});
}
else if(mp[p.lev][tx][ty]=='#' && !vis[(p.lev+)%][tx][ty])//不同层中进行传送
{
if(mp[(p.lev+)%][tx][ty]!='#' && mp[(p.lev+)%][tx][ty]!='*')//避免无限制的传送和撞死
{
vis[p.lev][tx][ty] = ;
vis[(p.lev+)%][tx][ty] = ;
que.push(Node{tx,ty,(p.lev+)%,p.c+});
}
}
}
}
}
return false;
} int main()
{
//FRE();
int kase;
cin>>kase;
while(kase--)
{
memset(vis,,sizeof(vis));
cin>>n>>m>>t;
for(int k=; k<; k++)
{
for(int i=; i<n; i++)
{
for(int j=; j<m; j++)
{
cin>>mp[k][i][j];
}
}
}
if(BFS())
cout<<"YES\n";
else
cout<<"NO\n";
}
return ;
}

HDU - 2102 A计划(双层BFS)的更多相关文章

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

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

  2. HDU 2102 A计划(BFS)

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

  3. HDU - 2102 A计划 【BFS】

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

  4. HDU 2102 A计划 (BFS)

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

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

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

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

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

  7. HDU 2102 A计划(两层地图加时间限制加传送门的bfs)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Time Limit: 3000/1000 MS (Java/Others)    Me ...

  8. hdu 2102 A计划 具体题解 (BFS+优先队列)

    题目链接:pid=2102">http://acm.hdu.edu.cn/showproblem.php?pid=2102 这道题属于BFS+优先队列 開始看到四分之中的一个的AC率感 ...

  9. hdu 2102 A计划

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸 ...

  10. hdu 2102 A计划(双层BFS)(具体解释)

    转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:http://acm.hdu.edu.cn/showproblem.php ...

随机推荐

  1. 【183】VMware + CentOS 安装教程等

    目录: VMware 虚拟机安装 虚拟机上安装 CentOS VMware Tools 安装 为程序增加环境变量 其他 1. VMware 虚拟机安装   ※ 参考:VMware 虚拟机安装使用教程( ...

  2. spoj 371 Boxes【最小费用最大流】

    对于ai==0连接(i,t,1,0),对于ai>1(s,i,ai-1,0),然后对以相邻的两个点(i,j)连接(i,j,inf,1),注意这里是一个环的形式,所以1和n+1相连 #include ...

  3. (矩阵快速幂)51NOD 1242斐波那契数列的第N项

    斐波那契数列的定义如下:   F(0) = 0 F(1) = 1 F(n) = F(n - 1) + F(n - 2) (n >= 2)   (1, 1, 2, 3, 5, 8, 13, 21, ...

  4. 如何快捷安装并配置MySQL 下载破解Navicat for mysql

    首先,要先下载MySQL,进官网下载相应的mysql版本,这个不收费,实在不知道的可以参考一下这篇:https://blog.csdn.net/qq_37172528/article/details/ ...

  5. vs2013问题解决办法—>fatal error LNK1168 如何避免

    问题:在使用visial studio 2013运行成功程序,但当修改其中的一段后,即语法,执行后报错  出现error:fatal error LNK1168:无法打开……\xxx.exe进行写入. ...

  6. 2017 JUST Programming Contest 3.0 B. Linear Algebra Test

    B. Linear Algebra Test time limit per test 3.0 s memory limit per test 256 MB input standard input o ...

  7. Ignatius and the Princess III HDU - 1028 || 整数拆分,母函数

    Ignatius and the Princess III HDU - 1028 整数划分问题 假的dp(复杂度不对) #include<cstdio> #include<cstri ...

  8. JetSpeed2部署至Apusic操作步骤记录

    JetSpeed2部署至Apusic操作步骤记录. 1.创建Apusic新域,配置端口.管理端口和管理密码. 2.将Tomcat/lib目录中的所有jar包复制至Apusic域中的lib目录中(包括数 ...

  9. URAL1389. Roadworks(dp)

    1389 算个简单的树形DP吧 不知道是不是数据太水 竟然一A了 就是对于当前节点有没有被选中就行选最优 有没有被选中的意思是有没有与它相连的边被选中 #include <iostream> ...

  10. C# 判断是否移动设备

    /// <summary> /// 判断是否移动设备. /// </summary> /// <returns></returns> public st ...