立体最短路径,广搜(POJ2251)
2016-04-07 20:19
127 查看
题目链接:http://poj.org/problem?id=2251
参考了一下大神们的解法。也有用深搜的。然而,之前不久看到一句话,最短路径——BFS。
参考:http://blog.csdn.net/lyy289065406/article/details/6647938
参考了一下大神们的解法。也有用深搜的。然而,之前不久看到一句话,最短路径——BFS。
参考:http://blog.csdn.net/lyy289065406/article/details/6647938
#include <stdio.h> #include <algorithm> #include <string.h> #include <queue> using namespace std; char map[35][35][35];///存放地图 bool hash[35][35][35];///这条路是否走过 struct point{ int x; ///l int y; ///r int z; ///c int step;///移动的步数 }; int main() { int l,r,c; while(scanf("%d%d%d",&l,&r,&c),l&&r&&c) { int i,j,k; point start; memset(hash,false,sizeof(hash)); for(i=0;i<l;i++) { for(j=0;j<r;j++) { scanf("%s",map[i][j]); for(k=0;k<c;k++) { if(map[i][j][k]=='S') { ///对起点初始化 start.x=i; start.y=j; start.z=k; start.step=0; hash[i][j][k]=true;///这条路走过了 } } } } queue<point> bfs; bfs.push(start);///入队 bool found=false; ///是否找到最优解 while(!bfs.empty()) { point tmp=bfs.front(); bfs.pop(); if(map[tmp.x][tmp.y][tmp.z]=='E') { found=true; printf("Escaped in %d minute(s).\n",tmp.step); break; } tmp.step++; point tmp2; if(tmp.x>0) ///向下走 { tmp2=tmp; tmp2.x--; if(map[tmp2.x][tmp2.y][tmp2.z]!='#'&&hash[tmp2.x][tmp2.y][tmp2.z]==false) { ///如果下一层不是障碍物并且没走过,则往下走,标记该点,入队 hash[tmp2.x][tmp2.y][tmp2.z]=true; bfs.push(tmp2); } } ///向上走 if(tmp.x<l-1) { tmp2=tmp; tmp2.x++; if(map[tmp2.x][tmp2.y][tmp2.z]!='#'&&hash[tmp2.x][tmp2.y][tmp2.z]==false) { hash[tmp2.x][tmp2.y][tmp2.z]=true; bfs.push(tmp2); } } ///向北走 if(tmp.y>0) { tmp2=tmp; tmp2.y--; if(map[tmp2.x][tmp2.y][tmp2.z]!='#'&&hash[tmp2.x][tmp2.y][tmp2.z]==false) { hash[tmp2.x][tmp2.y][tmp2.z]=true; bfs.push(tmp2); } } ///向南走 if(tmp.y<r-1) { tmp2=tmp; tmp2.y++; if(map[tmp2.x][tmp2.y][tmp2.z]!='#'&&hash[tmp2.x][tmp2.y][tmp2.z]==false) { hash[tmp2.x][tmp2.y][tmp2.z]=true; bfs.push(tmp2); } } ///向西走 if(tmp.z>0) { tmp2=tmp; tmp2.z--; if(map[tmp2.x][tmp2.y][tmp2.z]!='#'&&hash[tmp2.x][tmp2.y][tmp2.z]==false) { hash[tmp2.x][tmp2.y][tmp2.z]=true; bfs.push(tmp2); } } ///向东走 if(tmp.z<c-1) { tmp2=tmp; tmp2.z++; if(map[tmp2.x][tmp2.y][tmp2.z]!='#'&&hash[tmp2.x][tmp2.y][tmp2.z]==false) { hash[tmp2.x][tmp2.y][tmp2.z]=true; bfs.push(tmp2); } } } if(!found) printf("Trapped!\n"); } return 0; }
相关文章推荐
- B/S/S 和 C/S/S
- 标准差公式的变形
- 优秀程序员应具备的5项基本素质
- 今天主要是在项目上进行一个健康档案的改进
- 【前端性能】浅谈域名发散与域名收敛
- C++单向链表之删除节点
- Linux写时拷贝技术(copy-on-write)
- Makefile 脚本小列举
- bzoj 3107: [cqoi2013]二进制a+b 构造
- 枚举 51Nod1487 占领资源
- UI之FMDataBase
- 交叉编译时候如何配置连接库的搜索路径
- hadoop1.2.1安装配置
- HTML图片轮播代码
- 初学http协议之对http传参方式的理解
- 猿缘日记
- 【多重背包+完全背包】HDU3591The trouble of Xiaoqian
- 个人偏好设置,归档,解档
- Android Fragment应用实战,使用碎片向ActivityGroup说再见
- windows下使用eclipse远程编写hadoop配置