链接:点击打开链接

题意:三维搜索‘S’为起点,‘E’为终点,求走出的最短时间

代码:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <queue>
using namespace std;
int xx[]={1,-1,0,0,0,0}; //方向向量
int yy[]={0,0,1,-1,0,0};
int zz[]={0,0,0,0,1,-1};
int p,q,r;
char str[35][35][35];
struct node{
int x,y,z,sum;
};
int bfs(node st,node en){
int i;
queue<node>qu;
node cur,temp;
qu.push(st);
while(qu.size()){
cur=qu.front();qu.pop();
if(cur.x==en.x&&cur.y==en.y&&cur.z==en.z)
return cur.sum; //找到之后直接返回走的步数
for(i=0;i<6;i++){
temp.x=cur.x+xx[i];
temp.y=cur.y+yy[i];
temp.z=cur.z+zz[i];
temp.sum=cur.sum+1;
if(temp.x>=0&&temp.x<p&&temp.y>=0&&temp.y<q&&temp.z>=0&&temp.z<r)
if(str[temp.x][temp.y][temp.z]!='#'){
qu.push(temp);
str[temp.x][temp.y][temp.z]='#'; //走过之后就变成'#',省掉一个数组记录
} //是否走过
}
}
return -1;
}
int main(){
int i,j,k,sumsum;
node st,en;
while(scanf("%d%d%d",&p,&q,&r)!=EOF&&(p||q||r)){
for(i=0;i<p;i++)
for(j=0;j<q;j++)
for(k=0;k<r;k++){
cin>>str[i][j][k];
if(str[i][j][k]=='S')
st.x=i,st.y=j,st.z=k,st.sum=0;
else if(str[i][j][k]=='E')
en.x=i,en.y=j,en.z=k;
}
sumsum=bfs(st,en);
if(sumsum==-1)
printf("Trapped!\n");
else
printf("Escaped in %d minute(s).\n",sumsum);
}
return 0;
}

zoj1940的更多相关文章

  1. zoj1940(三维广搜)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=940 分析:三维其实就是六个方向地搜索,思维清晰且细心点,很快就AC了 ...

  2. OJ题目分类

    POJ题目分类 | POJ题目分类 | HDU题目分类 | ZOJ题目分类 | SOJ题目分类 | HOJ题目分类 | FOJ题目分类 | 模拟题: POJ1006 POJ1008 POJ1013 P ...

随机推荐

  1. Elasticsearch之CURL命令的DSL查询

    它是Domain Specific Language领域特定语言. https://www.elastic.co/guide/en/elasticsearch/reference/current/in ...

  2. 6.10---springboot的配置

  3. java学习笔记_序列化

    如果父类没有实现Serializable接口,子类实现了Serializable接口,那么子类是可以序列化的. 但是如果想要反序列化,那么就需要父类支持默认构造函数. 因为在反序列化的过程中不会调用子 ...

  4. 完整版本的停车场管理系统源代码带服务端+手机android客户端

    该源码是停车场管理软件附带源代码 J2EE服务端+android客户端,也是一套停车场管理车辆进出的管理软,喜欢的朋友可以看看吧. 应用的后台管理主要功能介绍:1  机构管理 ,机构有从属管理< ...

  5. Android Eclipse 安装教程 2016.06.13版

    2016.8.16修改 第一步,也是最为关键的一步——修改hosts文件 为什么说是最关键的一步呢?因为接下来的操作,我们都需要连接google网,也就是要连接国外的网站.一般情况下,国外的网站是无法 ...

  6. 提高mysql千万级大数据SQL查询优化几条经验

    凯哥java                             微信号                             kaigejava 功能介绍                    ...

  7. java中 数组 list map之间的互转

    三者之间转换关系,一张图清晰呈现. 上代码: 其中的maputils是apache的collection包. package util; import java.util.ArrayList; imp ...

  8. Nginx 重新加载日志配置

    最近在写一个nginx日志的切割脚本,切割完后,发现可以不重启服务,而直接重新加载日志配置文件的命令 [   kill -USR1 $nginx.pid   ],但是不知道 -USR1这个参数是什么意 ...

  9. Git与SVN版本控制系统

    关于版本控制 什么是版本控制?版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.在本书所展示的例子中,我们仅对保存着软件源代码的文本文件作版本控制管理,但实际上,你可以对任 ...

  10. HDU_1158_Employment Planning_dp

    Employment Planning Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Othe ...