文档章节

先放一下之前c++的BFS,然后试着拿php写一下

侯禹
 侯禹
发布于 2013/07/29 20:31
字数 655
阅读 45
收藏 0
点赞 0
评论 0

 

Description

You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not be filled with rock. It takes one minute to move one unit north, south, east, west, up or down. You cannot move diagonally and the maze is surrounded by solid rock on all sides.  

Is an escape possible? If yes, how long will it take?  

Input

The input consists of a number of dungeons. Each dungeon description starts with a line containing three integers L, R and C (all limited to 30 in size).  
L is the number of levels making up the dungeon.  
R and C are the number of rows and columns making up the plan of each level.  
Then there will follow L blocks of R lines each containing C characters. Each character describes one cell of the dungeon. A cell full of rock is indicated by a '#' and empty cells are represented by a '.'. Your starting position is indicated by 'S' and the exit by the letter 'E'. There's a single blank line after each level. Input is terminated by three zeroes for L, R and C.

Output

Each maze generates one line of output. If it is possible to reach the exit, print a line of the form  

Escaped in x minute(s).


where x is replaced by the shortest time it takes to escape.  
If it is not possible to escape, print the line  

Trapped!

Sample Input

3 4 5
S....
.###.
.##..
###.#

#####
#####
##.##
##...

#####
#####
#.###
####E

1 3 3
S##
#E#
###

0 0 0

Sample Output

其实就是个三维的宽搜,小弟代码写的,不好勿喷。。。。。。。

 

#include<cstdio>
#include<queue>
#include<cstring>
#include<iostream>
using namespace std;
struct point
{
  int x,y,z;
};
queue <point>que;
    int l,r,c;
point start,end,cur,pre;
int ans;
int xx,yy,zz;
char chess[32][32][32];
int ch[32][32][32];
int visit[32][32][32];
void path(int x,int y,int z,int t)
{
    switch(t)
    {
        case 0:xx=x+1;yy=y;zz=z;break;
        case 1:xx=x;yy=y+1;zz=z;break;
        case 2:xx=x;yy=y;zz=z+1;break;
        case 3:xx=x-1;yy=y;zz=z;break;
        case 4:xx=x;yy=y-1;zz=z;break;
        case 5:xx=x;yy=y;zz=z-1;break;
    }
    return ;
}
int bfs()
{
    que.push(start);
    visit[start.z][start.y][start.x]=1;
    while(!que.empty())
    {
        cur=que.front();
        que.pop();
        if(cur.x==end.x&&cur.y==end.y&&cur.z==end.z)
        {
            return visit[end.z][end.y][end.x];
        }
        for(int i=0;i<6;i++)
        {
            path(cur.x,cur.y,cur.z,i);
if(xx>=0&&yy>=0&&zz>=0&&zz<l&&xx<c&&yy<r&&visit[zz][yy][xx]==0&&ch[zz][yy][xx]==1)
            {
//cout<<"okz:"<<zz<<"oky:"<<yy<<"okx:"<<xx<<endl;
                pre.x=xx;
                pre.y=yy;
                pre.z=zz;
                visit[zz][yy][xx]=visit[cur.z][cur.y][cur.x]+1;
                que.push(pre);
                 }
        }

    }
return 0;
}
int main(void)
{//freopen("r.txt","r",stdin);
    while(cin>>l>>r>>c&&l+r+c!=0)
    {
        memset(chess,0,sizeof(chess));
        memset(ch,0,sizeof(ch));
        memset(visit,0,sizeof(visit));
        for(int i=0;i<l;i++)
        {
            for(int j=0;j<r;j++)
            {
                cin>>chess[i][j];
                for(int k=0;k<c;k++)
                {
                    if(chess[i][j][k]=='.')
                    ch[i][j][k]=1;
                    else if(chess[i][j][k]=='#')
                    ch[i][j][k]=0;
                   else if(chess[i][j][k]=='S')
                   {ch[i][j][k]=1;
                        start.x=k;
                        start.y=j;
                        start.z=i;
                    }
                    else if(chess[i][j][k]=='E')
                   {ch[i][j][k]=1;
                        end.x=k;
                        end.y=j;
                        end.z=i;
                    }
                }
            }
 
        }
        //cout<<"xyz"<<end.x<<end.y<<end.z<<endl;
        int t=bfs();
        while(!que.empty())que.pop();
        if(t!=0)
        cout<<"Escaped in "<<t-1<<" minute(s)."<<endl;
            else
            cout<<"Trapped!"<<endl;

    }
 
}


© 著作权归作者所有

共有 人打赏支持
侯禹
粉丝 94
博文 49
码字总数 34362
作品 0
海淀
程序员
C++灵魂所在之---多态的前世与今生

开头先送大家一句话吧: 众所周知,在20世纪80年代早期,C++在贝尔实验室诞生了,这是一门面向对象的语言,但它又不是全新的面向对象的语言,它是在传统的语言(C语言)进行面向对象扩展而来...

loving_forever_ ⋅ 2016/06/13 ⋅ 0

C语言/C++程序员编程学习代码训练—精讲

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 03/23 ⋅ 0

C语言/C++编程学习—绘制神奇代码之星空动态

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 03/26 ⋅ 0

C、C++、Java、JavaScript、PHP、Python分别用来开发什么?

C、C++、Java、JavaScript、PHP、Python分别用来开发什么? 2018-05-25 11:47编辑: 游星啊分类:程序人生来源:代码湾 开发程序人生C 招聘信息: C++工程师 Cocos2d-x游戏客户端开发 iOS开发...

游星啊 ⋅ 05/25 ⋅ 0

C语言编程入门学习:用C语言输出九九乘法表

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/29 ⋅ 0

Fortran与C/C++的混合开发。。。

最近在把一个Fortran的程序封成模块整合进一个C++的平台中。平生第一次做fortran,也算是第一次正二八经的做二进制的混合开发。简单写一些,算为前一段工作做个总结。。。 Fortran90与C++的整...

余二五 ⋅ 2017/11/08 ⋅ 0

C语言编程入门基础学习:替换字符串中的空格的实现

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 05/30 ⋅ 0

零基础准备学习编程,应该从哪门语言学起?

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 06/06 ⋅ 0

Mac 编译&安装 PHP-CPP

What is PHP-CPP? A C++ library for developing PHP extensions. It offers a collection of well documented and easy-to-use classes that can be used and extended to build native ext......

王And木 ⋅ 06/02 ⋅ 0

C语言编程学习不难学,是你没找对方法!

C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到...

小辰带你看世界 ⋅ 06/01 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

mysql in action / alter table

change character set ALTER SCHEMA `employees` DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci ;ALTER TABLE `employees`.`t2` CHARACTER SET = utf8mb4 , COLLAT......

qwfys ⋅ 今天 ⋅ 0

Java 开发者不容错过的 12 种高效工具

Java 开发者常常都会想办法如何更快地编写 Java 代码,让编程变得更加轻松。目前,市面上涌现出越来越多的高效编程工具。所以,以下总结了一系列工具列表,其中包含了大多数开发人员已经使用...

jason_kiss ⋅ 昨天 ⋅ 0

Linux下php访问远程ms sqlserver

1、安装freetds(略,安装在/opt/local/freetds 下) 2、cd /path/to/php-5.6.36/ 进入PHP源码目录 3、cd ext/mssql进入MSSQL模块源码目录 4、/opt/php/bin/phpize生成编译配置文件 5、 . ./...

wangxuwei ⋅ 昨天 ⋅ 0

如何成为技术专家

文章来源于 -- 时间的朋友 拥有良好的心态。首先要有空杯心态,用欣赏的眼光发现并学习别人的长处,包括但不限于工具的使用,工作方法,解决问题以及规划未来的能力等。向别人学习的同时要注...

长安一梦 ⋅ 昨天 ⋅ 0

Linux vmstat命令实战详解

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令...

刘祖鹏 ⋅ 昨天 ⋅ 0

MySQL

查看表相关命令 - 查看表结构    desc 表名- 查看生成表的SQL    show create table 表名- 查看索引    show index from  表名 使用索引和不使用索引 由于索引是专门用于加...

stars永恒 ⋅ 昨天 ⋅ 0

easyui学习笔记

EasyUI常用控件禁用方法 combobox $("#id").combobox({ disabled: true }); ----- $("#id").combobox({ disabled: false}); validatebox $("#id").attr("readonly", true); ----- $("#id").r......

miaojiangmin ⋅ 昨天 ⋅ 0

金山WPS发布了Linux WPS Office

导读 近日,金山WPS发布了Linux WPS Office中文社区版新版本,支持大部分主流Linux系统,功能更加完善,兼容性、稳定性大幅度提升。本次更新WPS将首次在Linux提供专业办公文件云存储服务,实...

问题终结者 ⋅ 昨天 ⋅ 0

springboot2输出metrics到influxdb

序 本文主要研究一下如何将springboot2的metrics输出到influxdb maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo......

go4it ⋅ 昨天 ⋅ 0

微信小程序 - 选择图片显示操作菜单

之前我分享过选择图片这个文章,但是我在实际开发测试使用中发现一个问题在使用 wx.chooseImage 选择照片显示出第一格是拍照,后面是相册里的图片。这种实现之前说过了,效果如下。 但是你从...

hello_hp ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部