题目链接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 使用UILocalizedIndexedCollation实现区域索引标题(Section Indexed Title)即拼音排序

    UITableView在行数相当多的时候,给人的感觉是非常笨重的.通常为了方便用户使用,采用的方法有:搜索框.按层级展示.区域索引标题. 前两种就不用介绍了,此文就介绍区域索引标题的实现. 区域索引标 ...

  2. WCF---服务发布的步骤

    服务发布的步骤: 1.打开你的VS2012网站项目,右键点击项目>菜单中 重新生成一下网站项目:再次点击右键>发布: 2.弹出网站发布设置面板,点击<新建..>,创建新的发布配 ...

  3. vim常用命令总结 (转)

      在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行.你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format ...

  4. poj 1206

    /** 题意: 给定一序列,置换k次之后 输出其状态 置换: 考察循环节长度, 思路: 分别求出每个元素的循环节的大小,用k 模其大小,大的k次之后的位置, 输出即可 **/ #include < ...

  5. JAVA泛型-擦除

    package com.xt.thinks15_7; import java.util.Arrays; class EraseObject1<A> { } class EraseObjec ...

  6. android HTTP发送及MD5加密收集

    发送部分: public void MyFunction{ HttpClient httpclient = new DefaultHttpClient(); //你的URL HttpPost http ...

  7. 查GDI对象泄露的利器:GDIView

    查GDI对象泄露的利器:GDIView可以很详细的查到进程的GDI对象的总个数,详细的GDI对象的个数,以及其增减数量.其GDI对象类型也可以很详细的得知,以及其内存地址,句柄.实在是好使! 下载地址 ...

  8. HDU 5755 Gambler Bo(高斯消元)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5755 [题目大意] 一个n*m由0,1,2组成的矩阵,每次操作可以选取一个方格,使得它加上2之后对 ...

  9. BZOJ 2253: [2010 Beijing wc]纸箱堆叠

    题目 2253: [2010 Beijing wc]纸箱堆叠 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 239  Solved: 94 Descr ...

  10. JWPlayer 使用小记

    最后的效果 1.从官网下载JWPlayer 下载后的文件,标红部分是必要的文件. 2.Jquery可以使用1.6以上版本 <html><head> <title>G ...