POJ - 2251 bfs [kuangbin带你飞]专题一
立体bfs,共有六个方向:
const int dx[] = {0,0,1,-1,0,0};
const int dy[] = {1,-1,0,0,0,0};
const int dz[] = {0,0,0,0,1,-1};
AC代码
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int maxn = 32;
char G[maxn][maxn][maxn];
int d[maxn][maxn][maxn];
const int dx[] = {0,0,1,-1,0,0};
const int dy[] = {1,-1,0,0,0,0};
const int dz[] = {0,0,0,0,1,-1};
int l, r, c;
struct node{
int x, y, z;
node(){
}
node(int x, int y, int z):x(x), y(y), z(z){
}
};
int bfs(int z, int x, int y) {
memset(d, -1, sizeof(d));
queue<node>q;
q.push(node(x, y, z));
d[z][x][y] = 0;
while(!q.empty()){
node p =q.front();
q.pop();
x = p.x, y = p.y, z = p.z;
if(G[z][x][y] == 'E') return d[z][x][y];
for(int i = 0; i < 6; ++i){
int px = x + dx[i], py = y + dy[i], pz = z + dz[i];
if(px < 0 || py < 0 || pz < 0 || px >= r || py >= c || pz >= l) continue;
if(G[pz][px][py] == '#' || d[pz][px][py] != -1) continue;
d[pz][px][py] = d[z][x][y] + 1;
q.push(node(px, py, pz));
}
}
return -1;
}
int main(){
while(scanf("%d%d%d", &l, &r, &c) == 3 && l){
for(int i = 0; i < l; ++i){
for(int j = 0; j < r; ++j) scanf("%s", G[i][j]);
}
int ans;
int x, y, z;
for(int i = 0; i < l; ++i)
for(int j = 0; j < r; ++j)
for(int k = 0; k < c; ++k) {
if(G[i][j][k] == 'S') {
z = i, x = j, y = k;
i = l, j = r, k = c;
}
}
ans = bfs(z, x, y);
if(ans == -1) printf("Trapped!\n");
else printf("Escaped in %d minute(s).\n", ans);
}
return 0;
}
如有不当之处欢迎指出!
POJ - 2251 bfs [kuangbin带你飞]专题一的更多相关文章
- POJ - 3414 bfs [kuangbin带你飞]专题一
状态搜索,每种状态下面共有六种选择,将搜索到的状态保存即可. d[i][j]表示状态A杯中水i升,B杯中水j升,总状态数量不会超过A杯的容量 * B杯的容量. AC代码 #include<cst ...
- POJ - 3984 bfs [kuangbin带你飞]专题一
bfs搜索过程中将路径保存下即可. AC代码 #include<cstdio> #include<cstring> #include<algorithm> #inc ...
- HDU - 3533 bfs [kuangbin带你飞]专题二
看了好久的样例才看懂. 题意:有一个人要从(0,0)走到(n,m),图中有k个碉堡,每个碉堡可以向某个固定的方向每隔t秒放一次炮,炮弹不能穿越另一个碉堡,会被阻挡.人在移动的过程中不会被炮弹打到,也就 ...
- HDU - 2102 A计划 (BFS) [kuangbin带你飞]专题二
思路:接BFS判断能否在限制时间内到达公主的位置,注意如果骑士进入传送机就会被立即传送到另一层,不会能再向四周移动了,例如第一层的位置(x, y, 1)是传送机,第二层(x, y, 2)也是传送机,这 ...
- UVA - 11624 多点bfs [kuangbin带你飞]专题一
题意:某人身陷火场,总有k个点着火,着火点可向四周扩散,问此人能否逃离. 思路:可能有多个着火点,以这些着火点作为起点进行bfs,得到整个火场的最短距离,然后又以人所在坐标作为起点进行bfs,得到该人 ...
- FZU - 2150 bfs [kuangbin带你飞]专题一
题意:两个人玩很变态的游戏,将一个草坪的某两个点点燃,点燃的草坪可以向上下左右四个方向扩散,问能否将整块草坪上面的草都点燃.如果能,输出最短时间(^_^他们就能玩更变态的游戏了),如果不能,输出-1. ...
- HDU - 2612 bfs [kuangbin带你飞]专题一
分别以两个人的家作为起点,bfs求得到每个KFC最短距离.然后枚举每个KFC,求得时间之和的最小值即可. 此题不符合实际情况之处: 通过了一个KFC再去另一个KFC可以吗? 出题人都没好好想过吗? ...
- HDU - 1495 bfs [kuangbin带你飞]专题一
模拟倒水的过程,每次可以把第i个杯子的水向第j个杯子里面倒,这可能出现新的状态,不停的更新状态,指导某两个杯子的水等于S/2说明找到答案,如果所有状态搜索完毕仍然不能均分,则退出. 注意:如果S是奇数 ...
- POJ - 3087 模拟 [kuangbin带你飞]专题一
模拟洗牌的过程,合并两堆拍的方式:使先取s2,再取s1:分离成两堆的方式:下面C张放到s1,上面C张到s2.当前牌型与第一次相同时,说明不能搜索到答案. AC代码 #include<cstdio ...
随机推荐
- 二、Html基本语法
1,XHTML的基本结构和规则 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> < ...
- 自己用的一套reset.css,打算整理一下方便以后用,持续更新中,各位大神,不喜勿喷
*{margin: 0; padding: 0;border:none;}img{vertical-align: top;width: 100%;border: none;}ul,li{list-st ...
- 面向对象之原型——challenge
面向对象之原型 object-oriented面向对象的设计,不同于其他语言,js中的面向对象没有类的概念,因此,其对象也有些特殊. 所谓对象就是无序属性的集合,其属性可以包含基本值.对象.函数.也就 ...
- 【php】RBAC 管理权限
用户 角色 权限 用户:张三 角色:管理员 权限:page/index1.php 能访问的页面
- linux的8小时差问题解决
下面是同步时间的解决方法: 1.vi /etc/sysconfig/clock #编辑文件 ZONE="Asia/Shanghai" UTC=false #设置为false,硬件时 ...
- 关于fprint()和fwrite()
int num = 12345; 将12345作为二进制数存储到num中 1. fprintf(fp,"%d",num); //把字符'1','2','3','4','5'的二进制 ...
- 排序算法之low B三人组
排序low B三人组 列表排序:将无序列表变成有充列表 应用场景:各种榜单,各种表格,给二分法排序使用,给其他算法使用 输入无序列表,输出有序列表(升序或降序) 排序low B三人组 1. 冒泡排序 ...
- 解决mysql、vsftp远程连接速度慢的问题
以 centOS 6.3(其他操作系统类似,同样适用)说明: 当我们的服务都配置正常的情况下,有时会出现连接速度慢而导致连接失败的问题 问题分析:这些情况一般都是DNS解析惹的祸 mysql连接速度慢 ...
- Python基础篇(七)
加上两个下划线变量或者方法变为私有. >>> class Bird: ... __song = "spark" ... def sing(self): ...
- Kibana安装配置
Kibana 是一个开源的分析和可视化平台,是ELK的重要部分.Kibana提供搜索.查看和与存储在 Elasticsearch 索引中的数据进行交互的功能.开发者或运维人员可以轻松地执行高级数据分析 ...