三维bfs
胜利大逃亡
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 25112 Accepted Submission(s): 9609
魔
王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0,0)的位置,离开城堡的门在
(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡,Ignatius每分钟能从一个坐标走到相邻的六个坐标中的其中一个.现在给你城
堡的地图,请你计算出Ignatius能否在魔王回来前离开城堡(只要走到出口就算离开城堡,如果走到出口的时候魔王刚好回来也算逃亡成功),如果可以请
输出需要多少分钟才能离开,如果不能则输出-1.

入数据的第一行是一个正整数K,表明测试数据的数量.每组测试数据的第一行是四个正整数A,B,C和T(1<=A,B,C<=50,1&
lt;=T<=1000),它们分别代表城堡的大小和魔王回来的时间.然后是A块输入数据(先是第0块,然后是第1块,第2块......),每块
输入数据有B行,每行有C个正整数,代表迷宫的布局,其中0代表路,1代表墙.(如果对输入描述不清楚,可以参考Sample
Input中的迷宫描述,它表示的就是上图中的迷宫)
特别注意:本题的测试数据非常大,请使用scanf输入,我不能保证使用cin能不超时.在本OJ上请使用Visual C++提交.
3 3 4 20
代码:
#include <stdio.h>
#include <string.h> int map[60][60][60];
int vt[60][60][60] ; struct N
{
int x, y, z;
int cnt; }s[210000], e, f; int xx[6]={0, 0, 0, 0, 1, -1};
int yy[6]={0, 0, -1, 1, 0, 0};
int zz[6]={1, -1, 0, 0, 0, 0}; int a, b, c, tt; void bfs()
{
int i, j=0, k=0 ;
int flag = 0; e.x = 0;
e.y = 0;
e.z = 0;
e.cnt = 0; s[k++] = e;
vt[0][0][0] =1 ; while(j < k )
{
e = s[j++];
if(e.x==a-1 && e.y==b-1 && e.z==c-1 )
{
if(e.cnt <= tt)
{
printf("%d\n", e.cnt );
return ;
}
else
{
printf("-1\n");
return ;
}
} for(i=0; i<6; i++)
{
f.x = e.x + xx[i];
f.y = e.y + yy[i];
f.z = e.z + zz[i]; if( f.x>=0&&f.x<a &&f.y>=0&&f.y<b && f.z>=0 &&f.z<c&& vt[f.x][f.y][f.z]==0 && map[f.x][f.y][f.z]==1 )
{
f.cnt = e.cnt + 1;
s[k++] = f;
vt[f.x][f.y][f.z]=1;
}
}
}
printf("-1\n"); /* if(flag==1 && sum <tt )
{
printf("%d\n", sum );
}
else
{
printf("-1\n");
} */
} int main()
{
int t;
int i, j, k,ff; scanf("%d", &t) ;
while(t--)
{
memset(map, 0, sizeof(map ));
memset(vt, 0, sizeof(vt ));
k = 0; scanf("%d %d %d %d", &a, &b, &c, &tt ); for(i=0; i<a; i++)
{
for(j=0; j<b; j++)
{
for(k=0; k<c; k++)
{
scanf("%d", &ff );
if(ff==1)
map[i][j][k] = 0; //memset 为0,避免冲突修改一下,1代表路,0 代表墙
else
{
map[i][j][k] = 1;
}
}
}
} if(map[a-1][b-1][c-1]==0 || a+b+c>tt) //出口处是墙 或者 可能到达出口的最短时间都比妖怪回来的时间长必然逃不了
{
printf("-1\n");
continue;
}
bfs(); }
return 0;
}
三维bfs的更多相关文章
- hdu 1240:Asteroids!(三维BFS搜索)
Asteroids! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- POJ 2251 Dungeon Master --- 三维BFS(用BFS求最短路)
POJ 2251 题目大意: 给出一三维空间的地牢,要求求出由字符'S'到字符'E'的最短路径,移动方向可以是上,下,左,右,前,后,六个方向,每移动一次就耗费一分钟,要求输出最快的走出时间.不同L层 ...
- POJ 2049— Finding Nemo(三维BFS)10/200
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013497151/article/details/29562915 海底总动员.... 这个题開始 ...
- POJ.2251 Dungeon Master (三维BFS)
POJ.2251 Dungeon Master (三维BFS) 题意分析 你被困在一个3D地牢中且继续寻找最短路径逃生.地牢由立方体单位构成,立方体中不定会充满岩石.向上下前后左右移动一个单位需要一分 ...
- AOJ.866 飞越原野 (三维BFS)
AOJ.866 飞越原野 (三维BFS) 题意分析 点我挑战题目 相比于普通的BFS,要多一维来记录当前剩余的体力.而且还要额外的一层循环来处理,飞过的路程. 代码总览 #include <io ...
- SDUT OJ 1124 飞越原野 (三维BFS练习)
飞跃原野 nid=24#time" title="C.C++.go.haskell.lua.pascal Time Limit5000ms Memory Limit 65536K ...
- hdu 1885 Key Task (三维bfs)
题目 之前比赛的一个题, 当时是崔老师做的,今天我自己做了一下.... 还要注意用bfs的时候 有时候并不是最先到达的就是答案,比如HDU 3442 这道题是要求最小的消耗血量伤害,但是并不是最先到 ...
- HDU 1885 Key Task(三维BFS)
题目链接 题意 : 出口不止一个,一共有四种颜色不同的门由大写字母表示,而钥匙则是对应的小写字母,当你走到门前边的位置时,如果你已经走过相应的钥匙的位置这个门就可以走,只要获得一把钥匙就可以开所有同颜 ...
- HDU 1253 胜利大逃亡(三维BFS)
点我看题目 题意 : 中文题不详述. 思路 :因为还牵扯到层的问题,所以用三维的解决,不过这个还是很简单的BFS,六个方向搜一下就可以了,一开始交的时候老是超时,怎么改都不对,后来看了一个人写的博客, ...
- hdu 1240 Asteroids! (三维bfs)
Asteroids! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...
随机推荐
- python判断值是否为空
代码中经常会有变量是否为None的判断,有三种主要的写法: 第一种是`if x is None`: 第二种是 `if not x:`: 第三种是`if not x is None`(这句这样理解更清晰 ...
- 第八章 委托,lamdbda 表达式和事件
第八章 委托,lamdbda 表达式和事件 委托是寻址方式的.net版本. 委托是类型安全的类,它定义了返回类型和参数的类型.委托类不仅包含方法的应用,也可以包含对多个方法的引用. 在 C++中,函数 ...
- 修改NameNode端口后,hive表查询报错
在进行使用hive查询表数据的时候,抛出异常 hive> select*from blackList;FAILED: SemanticException Unable to determine ...
- u-boot README--Memory Management&initialize
Memory Management:------------------ U-Boot runs in system state and uses physical addresses, i.e. t ...
- PHP压缩上传图片
最近手上的项目页面要显示很多图片,虽然用了jQuery的lazyload,但是效果并没理想,滑动到一个区域还要比较长的时间图片才完全显示出来.于是想着将上传上去的900KB+压缩备份一份缩略图. PH ...
- html自定义标签属性
<a href="#" _asd="xxxx" onclick="test(event)">test</a> < ...
- maven 常用的环境插件
<build> <finalName>yycgproject</finalName> <plugins> <!-- 修改jdk插件 --> ...
- Python读取word文档(python-docx包)
最近想统计word文档中的一些信息,人工统计的话...三天三夜吧 python 不愧是万能语言,发现有一个包叫做 docx,非常好用,具体查看官方文档:https://python-docx.read ...
- Tomcat startup.bat启动隐藏弹出的信息窗口
to make tomcat to use javaw.exe instead of java.exe using some startup parameter or environment vari ...
- 转载:python基础之模块
作者:武沛齐 出处:http://www.cnblogs.com/wupeiqi/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接. 模块,用一 ...