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 ...
随机推荐
- 对CRC32的小结加上bugku一道题目:好多压缩包
CRC32就是校验值,一般来说不同的文件校验值不一样,所以我们可以挨个爆破,当然这是在文件比较小的时候.下面是几种情形. 1. 我新建了一个flag.txt文档,里面是我的生日20180818 然后我 ...
- 【转载】主成分分析法(PCA)
https://www.jisilu.cn/question/252942 进行维数约减(Dimensionality Reduction),目前最常用的算法是主成分分析法 (Principal Co ...
- 谈谈Python中元类Metaclass(二):ORM实践
什么是ORM? ORM的英文全称是“Object Relational Mapping”,即对象-关系映射,从字面上直接理解,就是把“关系”给“对象”化. 对应到数据库,我们知道关系数据库(例如Mys ...
- 【EX_BSGS】BZOJ1467 Pku3243 clever Y
1467: Pku3243 clever Y Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 425 Solved: 238[Submit][Status ...
- nodeJS学习(4)--- webstorm/...开发 NodeJS 项目-节1
前提: 已安装好 IDE ,eg:webstorm/IDEA 2016.3 & 2017.1 nodeJS(含 npm 及 相应的模板等) 要用 webstorm 开发 NodeJS项目(we ...
- 【07】react 之 生命周期
阅读目录(Content) 实例化 getDefaultProps getInitialState componentWillMount render componentDidMount 存在期 co ...
- linux中的strip命令简介------给文件脱衣服【转】
转自:http://blog.csdn.net/stpeace/article/details/47090255 版权声明:本文为博主原创文章,转载时请务必注明本文地址, 禁止用于任何商业用途, 否则 ...
- c#随机生成汉字、字母、数字
/// <summary> /// 替换变量 /// </summary> /// <param name="content"></par ...
- (6)ASP.NET HttpServerUtility 类
HttpServerUtility 类 提供用于处理 Web 请求的 Helper 方法 https://msdn.microsoft.com/zh-cn/library/system.web.htt ...
- BZOJ1054(搜索)
大力搜,状态用一个16位的数字表示. #include <bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i( ...