hdu2102 BFS
这是一道BFS的搜索题目,只是搜索范围变为了三维。定义数组visit[x][y][z]来标记空间位置,x表示楼层,y和z表示相应楼层的平面坐标。
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
using namespace std;
#include<queue>
#define MAX_SIZE 12
int N, M, T;
char visit[][MAX_SIZE][MAX_SIZE];
char map[][MAX_SIZE][MAX_SIZE];
int dir[][] = { {,},{,-},{,},{-,} };
struct Point{
int x, y, z, step;
bool Isleg() {
if ( y< || y>N-||z<||z>M-||map[x][y][z]=='*'||visit[x][y][z])
return false;
return true;
}
};
int BFS();
int main() {
int i,c,res;
scanf("%d", &c);
while(c--){
scanf("%d%d%d", &N, &M, &T);
for (i = ; i <N; i++)
scanf("%s", map[][i]);
for (i =; i < N;i++)
scanf("%s",map[][i]);
res = BFS();
if (res <= T)
printf("YES\n");
else
printf("NO\n");
}
return ;
}
int BFS() {
Point next, pos;
int k,i,j;
for (i = ; i < ; i++) {
for (k = ; k <N; k++)
for (j = ; j <M; j++)
visit[i][k][j] = ;
}
pos.x = , pos.y = ,pos.z=; //入口位置
pos.step = ;
queue<Point>Q;
Q.push(pos); //入口位置首先入队
visit[pos.x][pos.y][pos.z] = ; //入口位置标记为访问
while (!Q.empty()) {
pos = Q.front();
Q.pop();
if (map[pos.x][pos.y][pos.z] == 'P')
return pos.step;
pos.step++;
if (map[pos.x][pos.y][pos.z] == '#') {
next = pos;
next.x = (next.x + ) % ; //进入下一层
if (next.Isleg()) {
visit[next.x][next.y][next.z] = ;
next.step--; //时空传输不发费时间
Q.push(next);
}
}
else {
for (k = ; k < ; k++) { //扫描四个方向
next = pos;
next.y += dir[k][];
next.z += dir[k][];
if (next.Isleg()) {
visit[next.x][next.y][next.z] = ;
Q.push(next);
}
}
}
}
return INT_MAX;
}
hdu2102 BFS的更多相关文章
- A计划 hdu2102(BFS)
A计划 hdu2102 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长生不老.年迈的国 ...
- hdu2102(bfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 分析:bfs求最短时间到达'P'点,不过本题有好几个trick,我都踩到了,自己还是太嫩了... ...
- A计划 hdu2102(bfs一般题)
A计划 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- HDU2102 A计划 —— BFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2102 A计划 Time Limit: 3000/1000 MS (Java/Others) Me ...
- HDU_2102 A计划 【BFS】
一.题目 HDU2102 二.题意分析 该题其实就是三位空间内的BFS,但比较简单的是,它设置了传送门,可以直接传送上去,需要注意的是 1.到了传送门的时候要重新考虑传送的点的三种情况. (1)若又是 ...
- 【HDU - 2102】A计划(bfs)
-->A计划 Descriptions: 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的 ...
- 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)
图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...
- 【BZOJ-1656】The Grove 树木 BFS + 射线法
1656: [Usaco2006 Jan] The Grove 树木 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 186 Solved: 118[Su ...
- POJ 3278 Catch That Cow(bfs)
传送门 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 80273 Accepted: 25 ...
随机推荐
- 2、HTML基础总结 part-2
1.表单一 <html> <body> <form> 姓名: <input type="text" name="name&quo ...
- CSU-1985 驱R符
CSU-1985 驱R符 Description 阴阳师中有三中稀有度的式神R,SR,SSR,其中R的稀有度最低,每次抽符,会随机得到一种式神,然而子浩君对R式神已经深恶痛绝. 某天,子浩君突然发现, ...
- DataFrame的iloc与loc的区别是什么?
对于一个DataFrame A,A.loc[k]是读取A中index为k的那一行.A.iloc[k]是读取A中的第k行.
- webform登陆界面样式丢失
本文摘抄自:http://blog.csdn.net/sssix/article/details/16945347 请阅读原文. Forms验证——登录界面样式实效? <authenticati ...
- 整合SpringMVC与Mybatis
第一步.导包 第二步.配置springmvc springmvc.xml <?xml version="1.0" encoding="UTF-8"?> ...
- 基于Linux的嵌入式文件系统构建与设计
摘 要:Linux是当今一种十分流行的嵌入式操作系统.由于其具有执行效率高.占用空间小.实时性能优良和可扩展性强等特点,因此被广泛应用于工业控制领域.该文对其文件系统进行了简单的介绍,结合嵌入式系统应 ...
- Vue处理边界之$root、$parent、$refs
Vue处理边界之parent.$refs 下面的功能都是有风险的,尽量避免使用 1.Vue 子组件可以通过 $root 属性访问父组件实例的属性和方法 <div id="app&quo ...
- mysql 排序字段与索引有关系吗?
mysql 排序字段与索引有关系吗?答案与否需要你explain一下你的sql脚本 另外记住:date_add()方法会影响Index_modify_time索引(即:时间字段索引) 一般遇到这样的 ...
- 【HDOJ5512】Pagodas(数论)
题意:给定n,a,b,一开始集合里面有两个数:a和b,然后两个人轮流往这个集合里面增加数字 增加数字的原则是:这个集合里面任选两个数的和或差(a + b或a - b或b -a的中的任意一个没被选中的属 ...
- Java中Collections的sort方法和Comparable与Comparator的比较
一.Comparable 新建Student1类,类实现Comparable接口,并重写compareTo方法 public class Student1 implements Comparable& ...