题目:

可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验。魔王已经发出消息说将在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 = 15;
int dx[4]= {0,0,-1,1};
int dy[4]= {1,-1,0,0};
int vis[2][maxn][maxn];
char mp[2][maxn][maxn];
int n,m,t;
struct Node
{int x,y,lev,c;
};bool isin(int x,int y)
{return x>=0&&x<n&&y>=0&&y<m;
}bool BFS()
{queue<Node> que;vis[0][0][0] = 1;que.push(Node{0,0,0,0});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=0; i<4; 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] = 1;que.push(Node{tx,ty,p.lev,p.c+1});}else if(mp[p.lev][tx][ty]=='#' && !vis[(p.lev+1)%2][tx][ty])//不同层中进行传送
                {if(mp[(p.lev+1)%2][tx][ty]!='#' && mp[(p.lev+1)%2][tx][ty]!='*')//避免无限制的传送和撞死
                    {vis[p.lev][tx][ty] = 1;vis[(p.lev+1)%2][tx][ty] = 1;que.push(Node{tx,ty,(p.lev+1)%2,p.c+1});}}}}}return false;
}int main()
{//FRE();int kase;cin>>kase;while(kase--){memset(vis,0,sizeof(vis));cin>>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(BFS())cout<<"YES\n";elsecout<<"NO\n";}return 0;
}

转载于:https://www.cnblogs.com/sykline/p/10496736.html

HDU - 2102 A计划(双层BFS)相关推荐

  1. Aquarius's Trial F - 6 HDU - 2102 A计划

    A计划 Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的 ...

  2. HDU 2102 A计划

    该题是一道典型的搜索题, #include<stdio.h> #include<stdlib.h> #include<string.h> struct Node { ...

  3. HDU 2102 A计划(广度优先搜索+数据)

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

  4. BFS HDOJ 2102 A计划

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

  5. 专题训练二 搜索进阶 HDU - 3085 Nightmare Ⅱ (双向BFS + 曼哈顿距离)

    HDU - 3085 Nightmare Ⅱ (双向BFS + 曼哈顿距离) Problem Description Last night, little erriyue had a horrible ...

  6. 【HDU - 2102】A计划 (麻烦一点的bfs)

    题干: 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老.年迈的国王正是心急如焚, ...

  7. HDU 2102 题解(BFS 广度优先搜索 练习题)

    原题链接,但是HDU现在校外提交需要审核 欢迎来 SCPC OJ提交 知识点 : BFS(广搜/宽搜) 原题: 描述: 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生 ...

  8. HDU2102 A计划【BFS】

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

  9. HDU 5836 Rubik's Cube BFS

    Rubik's Cube 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5836 Description As we all know, Zhu is ...

最新文章

  1. SELECT 语句与其子句的详解
  2. R语言as.numeric函数将因子变量(factor)转化为数值变量(Numeric)
  3. 拔最多的鹅毛,听最少的鹅叫
  4. [转]php curl 设置host curl_setopt CURLOPT_HTTPHEADER 指定host
  5. 《Drupal实战》——2.5 使用Node clone快速添加测试数据
  6. vscode中装js解释器_h5学习记录(1)--vscode配置js开发环境
  7. CF722D. Generating Sets[贪心 STL]
  8. 【转载】QT 的信号与槽机制介绍
  9. zend studio 7.2.0怎么创建项目
  10. 15.Linux 高性能服务器编程 --- 进程池和线程池
  11. Atitit vscode 调试php vscode使用法 目录 1. 直接debug没反应,或者打开扩展列表 1 2. 调试配置法 1 2.1. Debug》》Add cfg php 1 2.2.
  12. 黑马程序员顺义校区php_传智播客·黑马程序员顺义新校区来校路线介绍
  13. blender基本翻译+快捷键
  14. Pisces集成logback
  15. PC网站微信第三方登陆
  16. 想做web开发 就学JavaScript
  17. 华为3108raid安linux,华为RH2288HV3部署RAID(阵列卡LSISAS3108)
  18. python 遍历列表、每次取两个参数_Python列表遍历知多少
  19. 5.1 单片机-16x16LED点阵屏
  20. SSL证书(HTTPS)的加密算法

热门文章

  1. 面试常备题(三)----顺时针打印矩阵
  2. 《设计模式详解》行为型模式 - 备忘录模式
  3. struts2+spring+hibernate框架整合与项目
  4. 通过命令行安装或卸载Tomcat服务
  5. python中int的“四舍五入”
  6. virmach主机购买和使用
  7. flex自定义更新UI
  8. android 生成apk名字自动已,Jenkins打包android应用时自动签名apk详解
  9. make it a chorus笔记
  10. python中reshape_python numpy reshape用法及代码示例