题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2102

思路分析:

<1>搜索方法分析:由于需要寻找最短的找到公主的路径,所以采用bfs搜索

<2>需要注意的地方:

1)如果当前状态为'#'字符,需要传送到另外一层,但是从该层到另外一层的时间是不会计算;

2)如果当前状态为'#'字符,则应该考虑该状态能否拓展;因为另一层的相同位置的字符可能为

'S','P','.','*'或者'#',所以对于另一层相同位置的字符可能的各种情况应该考虑到并处理;

只有当字符为’P’或者’.’时才能被传送,其他字符不能传送,即该状态不能拓展,需要被剪枝;

PS:由于没有考虑到另一层的各种情况,导致WA多次,希望引以为鉴。

代码如下:

#include <iostream>
#include <queue>
#include <cstdio>
#include <cstring>
using namespace std; const int MAX_N = + ;
char maze[][MAX_N][MAX_N];
bool visited[][MAX_N][MAX_N];
int N, M, T;
int move_[][] = {{-, }, {, }, {, -}, {, }}; struct Node
{
int x, y, z;
int time;
Node() { x = y = z = time = ; }
Node(int i, int j, int k, int t) { x = i; y = j; z = k; time = t; }
}; int Bfs()
{
Node start;
queue<Node> state; state.push(start);
visited[][][] = true;
while (!state.empty())
{
int x, y, z, t;
Node temp_state; temp_state = state.front();
state.pop();
x = temp_state.x;
y = temp_state.y;
z = temp_state.z;
t = temp_state.time;
for (int i = ; i < ; ++i)
{
char maze_ch = maze[z][x][y];
int next_x = x + move_[i][];
int next_y = y + move_[i][];
int next_z = z;
int next_time = t + ;
char maze_n_ch = maze[next_z][next_x][next_y]; if (next_x < || next_x >= N || next_y < || next_y >= M
|| next_time > T || visited[next_z][next_x][next_y])
continue;
if (maze_n_ch == '#')
next_z = - next_z;
maze_n_ch = maze[next_z][next_x][next_y];
if (maze_n_ch == '*' || maze_ch == '#')
continue;
if (maze_n_ch == 'P')
return next_time;
Node next_state(next_x, next_y, next_z, temp_state.time + );
state.push(next_state);
visited[next_z][next_x][next_y] = true;
}
}
return -;
} int main()
{
int case_times; scanf("%d", &case_times);
while (case_times--)
{
int ans = ; scanf("%d %d %d", &N, &M, &T);
for (int i = ; i < ; ++i)
for (int j = ; j < N; ++j)
scanf("%s", maze[i][j]);
memset(visited, , sizeof(visited));
ans = Bfs();
if (ans == -)
printf("NO\n");
else
printf("YES\n");
}
return ;
}

HDOJ 2102 A计划(bfs)的更多相关文章

  1. BFS HDOJ 2102 A计划

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

  2. hdoj 2102 A计划

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

  3. HDU 2102 A计划(BFS/DFS走迷宫)

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

  4. hdu 2102 A计划-bfs

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...

  5. HDU - 2102 A计划 (BFS) [kuangbin带你飞]专题二

    思路:接BFS判断能否在限制时间内到达公主的位置,注意如果骑士进入传送机就会被立即传送到另一层,不会能再向四周移动了,例如第一层的位置(x, y, 1)是传送机,第二层(x, y, 2)也是传送机,这 ...

  6. HDU 2102 A计划 (BFS或DFS)

    题意:中文题. 析:是一个简单的搜索,BFS 和 DFS都可行, 主要是这个题有一个坑点,那就是如果有一层是#,另一个层是#或者*,都是过不去的,就可以直接跳过, 剩下的就是一个简单的搜索,只不过是两 ...

  7. hdoj 2102 A计画 【BFS】

    称号:hdoj 2102 A计画点击打开链接 意甲冠军:文的就不说了.求救出公主所须要的最短时间,所以用广搜. 分析:读题之后不难做,比一般的题目多了一个条件就是能够传送,那么我们能够在广搜里面加一个 ...

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

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

  9. hdu 2102 A计划

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

随机推荐

  1. iOS iOS9下修改回HTTP模式进行网络请求

    升级为iOS9后,默认请求类型为https,如何使用http进行请求会报错 The resource could not be loaded because the App Transport Sec ...

  2. npm总是安装不成功,而且很慢?

    什么方法解决: 在cmd 里面先运行 npm config set registry "http://registry.npm.taobao.org"  然后再安装npm 就会很快 ...

  3. clip原理

    1.clip的概述: clip是修剪之意 clip有4个属性值:inherit auto rect(20px,40px,60px,0px) !important 其中有作用的仅rect这个属性值,着重 ...

  4. 安卓里面JSON处理和JAVA SE里面的JSON包

    今天编译安卓项目遇到这个问题 com.android.dex.DexException: Multiple dex files define的解决办法 大致意思就是引用了 相同的包 在JAVA SE里 ...

  5. printf不同格式表示法

    格式代码 A ABC ABCDEFGH %S A ABC ABCDEFGH %5S ####A ##ABC ABCDEFGH %.5S A ABC ABCDE %5.5S ####A ##ABC AB ...

  6. android-通知Notification

    发送通知 public class MyActivity extends Activity { @Override protected void onCreate(Bundle savedInstan ...

  7. checkbox 全选反选实现全代码

    //跳转到指定action function validateForm(url){ if($("#form").form('validate')){ var x=document. ...

  8. GitHub Android 最火开源项目Top20 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上。基于不要重复造轮子的原则,了解当下比较流行的Android与iOS开源项目很是必要。利用这些项目,有时能够让你达到事半功倍的效果。

    1. ActionBarSherlock(推荐) ActionBarSherlock应该算得上是GitHub上最火的Android开源项目了,它是一个独立的库,通过一个API和主题,开发者就可以很方便 ...

  9. Jsoup代码解读之二-DOM相关对象

    Jsoup代码解读之二-DOM相关对象   之前在文章中说到,Jsoup使用了一套自己的DOM对象体系,和Java XML API互不兼容.这样做的好处是从XML的API里解脱出来,使得代码精炼了很多 ...

  10. [PHP] PHP初学者想了解"伪静态",必须看这个贴 [复制链接] [推荐]

    一.何为“伪静态”? 以传智播客bbs论坛为例,这篇帖子的链接地址原本应该是“http://bbs.itcast.cn/forum.php?mod=post&action=newthread& ...