搜索--12
来源:互联网 发布:诺基亚jar软件下载 编辑:程序博客网 时间:2024/06/06 03:28
题目大概:
输入3个数,为立方体的长宽高,再输入立方体中的每个位置的状态,有起点,终点,障碍物,可以通过的地方。计算起点到终点的最少步数。
思路:
建立一个三维的地图,每个点有六种走法。
用广度优先搜索,用队列存储,不断把每个点的六种走法存到队列中,不断寻找终点,计算最少步数。
感想:
与二维的地图差不多,只是改成三维,走的方向多了。
上一个博客忘记说了,每用完一次队列,一定要清空,否则会错误。
代码;
#include <iostream>#include <queue>#include <cstring>using namespace std;int x[6]={1,-1,0,0,0,0},y[6]={0,0,1,-1,0,0},h[6]={0,0,0,0,1,-1};int n,m,k,sum=0,hh[31][31][31];char map[31][31][31];struct point{int xx,yy,z;int j;};point e;queue<point>b;int bfs(point q){q.j=0; b.push(q);hh[q.xx][q.yy][q.z]=1; point r,t; while (!b.empty()) {r=b.front();b.pop(); for(int i=0;i<6;i++) {t.xx=r.xx+x[i]; t.yy=r.yy+y[i]; t.z=r.z+h[i]; if(t.xx>0&&t.xx<=k&&t.yy>0&&t.yy<=m&&t.z>0&&t.z<=n&&hh[t.xx][t.yy][t.z]==0&&map[t.xx][t.yy][t.z]!='#') {t.j=r.j+1;if(t.xx==e.xx&&t.yy==e.yy&&t.z==e.z){return t.j;} hh[t.xx][t.yy][t.z]=1; b.push(t); } } } return -1;}int main(){ while(cin>>k>>m>>n){memset(map,0,sizeof(map)); if(n==0&&m==0&&k==0)break; point q;for(int i=1;i<=k;i++){ for(int j=1;j<=m;j++) { for(int t=1;t<=n;t++) { cin>>map[i][j][t]; if(map[i][j][t]=='S'){ q.xx=i;q.yy=j;q.z=t; } if(map[i][j][t]=='E'){ e.xx=i;e.yy=j;e.z=t; } } }}memset(hh,0,sizeof(hh));int l=bfs(q);if(l==-1)cout<<"Trapped!"<<endl;elsecout<<"Escaped in "<<l<<" minute(s)."<<endl; while (!b.empty()){b.pop();}} return 0;}
阅读全文
0 0
- 搜索--12
- 搜索练习题L-12
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- 搜索
- [.py]寻找第n个默尼森数(初级版)
- Centos7安装svn服务器
- 豪杰信息杯E-Partial Sum
- vm centos火狐找不到服务器
- USACO
- 搜索--12
- 计算机英语·T
- 从Delphi返回动态数组到C#和C++
- 主线程中同步的 XMLHttpRequest 已不推荐使用,因其对终端用户的用户体验存在负面影响。
- VC链接SQLite的方法
- 浅谈在React中使用Redux数据流(三)
- S5PV210系列 (裸机十一)之 定时器、看门狗和RTC(二)
- y460 win7 关闭小键盘
- Mybatis 自动构建