博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 2251 Dungeon Master (bfs)
阅读量:6541 次
发布时间:2019-06-24

本文共 1440 字,大约阅读时间需要 4 分钟。

刷水题好爽!但是别真跟xcy说的一样,把rp都给用完了...

三维空间的bfs,只是搜索的时候多了两个方向而已。

code:

#include<cstdio>
#include<cstring>
bool vis[
31][
31][
31] ;
int lve[
6] = {
1
0
0
0
0, -
1} ;
int row[
6] = {
0, -
1
0
0
1
0} ;
int col[
6] = {
0
0, -
1
1
0
0} ;
bool flag ;
int a, b, c ;
struct node{
    
int x ;
    
int y ;
    
int z ;
    
int step ;
}q[
1000000] ;
node s, e ;
bool 
in(node t){
    
if(t.x>=
0&&t.x<a&&t.y>=
0&&t.y<b&&t.z>=
0&&t.z<c) 
return 
true ;
    
return 
false ;
}
void bfs(){
    
int h, r ;
    h = 
0 ;
    r = 
1 ;
    q[
0] = s ;
    
int j=
0 ;
    
while(r>h){
        node p = q[h++] ;
        
for(
int i=
0; i<
6; i++){
            node temp = p ;
            temp.x += lve[i] ;
            temp.y += row[i] ;
            temp.z += col[i] ;
            
if(
in(temp)&&!vis[temp.x][temp.y][temp.z]){
                
if(temp.x==e.x&&temp.y==e.y&&temp.z==e.z){
                    printf(
"
Escaped in %d minute(s).\n
", temp.step+
1) ;
                    flag = 
true ;
                    
return ;
                }
                vis[temp.x][temp.y][temp.z] = 
true ;
                temp.step ++ ;
                q[r++] = temp ;
            }
        }
    }
}
int main(){
    
int i, j, k ;
    
char str[
31] ;
    
while(~scanf(
"
%d%d%d
", &a, &b, &c)&&(a+b+c)){
        memset(vis, 
false
sizeof(vis)) ;
        
for(i=
0; i<a; i++){
            
for(j=
0; j<b; j++){
                getchar() ;
                scanf(
"
%s
", str) ;
                
for(k=
0; k<c; k++){
                    
if(str[k]==
'
S
'){
                        s.x = i ;
                        s.y = j ;
                        s.z = k ;
                        s.step = 
0 ;
                        vis[i][j][k] = 
true ;
                    }
else 
if(str[k]==
'
E
'){
                        e.x = i ;
                        e.y = j ;
                        e.z = k ;
                    }
else 
if(str[k]==
'
#
')
                        vis[i][j][k] = 
true ;
                }
            }
        }
        flag = 
false ;
        bfs() ;
        
if(!flag)   printf(
"
Trapped!\n
") ;
    }
    
return 
0 ;

转载于:https://www.cnblogs.com/xiaolongchase/archive/2012/02/16/2353510.html

你可能感兴趣的文章
标准与扩展ACL实验
查看>>
励志决心
查看>>
【技巧】easyUI的datagrid,如何在翻页以后仍能记录被选中的行
查看>>
Android中visibility属性VISIBLE、INVISIBLE、GONE的区别
查看>>
某篇ctr预估ppt的链接
查看>>
在CentOS7中配置网络时常见的LSB加载失败问题
查看>>
Kafka 0.7.2 单机环境搭建
查看>>
经过强制类型转换以后,变量a, b的值分别为( )short a = 128; byte b = (byte) a;
查看>>
Dcloud课程6 php脚本如何在Linux下定时更新数据
查看>>
js进阶 14-7 jquery的ajax部分为什么需要对表单进行序列化
查看>>
ubuntu下msmtp+mutt的安装和配置
查看>>
利用sqoop对mysql执行DML操作
查看>>
hibernate中视图的映射
查看>>
Ionic3 UI组件之 ImageViewer
查看>>
flask框架----flask基础
查看>>
Oracle之RMAN备份及还原
查看>>
蓝桥杯-学校的第一次练习题
查看>>
spring中注解说明
查看>>
hdu 4135 -Co-prime
查看>>
二叉树的建立与先序、中序、后序遍历
查看>>