rt,是道bfs题
题:
题目描述
一个三维迷宫,其中用‘.’表示空地,‘#’表示障碍物,‘S’表示起点,‘E’表示终点,求从起点到终点的最小移动次数,在行动时除了东南西北移动外还多了上下移动。可以上下左右前后移动,每次都只能移到相邻的空位,每次需要花费一分钟,求从起点到终点最少要多久。
输入
多组测试数据。
一组测试测试数据表示一个三维迷宫:
前三个数,分别表示层数、一个面的长和宽,后面是每层的平面图。前三个数据为三个零表示结束。
0<每个数<=100 输出
最小移动次数。
如果能够到达终点,输出Escaped in x minute(s).其中x为移动次数。
如果不能到达终点,输出Trapped!
样例输入1 3 4 5
S....
.###.
.##..
###.#
##.##
##...
#.###
####E
1 3 3
S##
#E#
0 0 0
样例输出1
Escaped in 11 minute(s).
Trapped!
我的代码:
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
struct book{
int x,y,z;
};
int c,k,g;char In[110][110][110];int map[110][110][110];int walk[6][3]={{-1,0,0},{0,-1,0},{1,0,0},{0,1,0},{0,0,1},{0,0,-1}};
queue<book>Q;
void bfs(){
while(!Q.empty()){
book b=Q.front();
int bx=b.x,by=b.y,bz=b.z;
Q.pop();
for(int i=1;i<=6;i++){
int bok=map[c][k][g];
int nx=bx+walk[i][0],ny=by+walk[i][1],nz=bz+walk[i][2];
if(nx>=1&&nx<=c&& ny>=1&&ny<=k&& nz>=1&&nz<=g &&map[nx][ny][nz]==0) continue;
map[nx][ny][nz]=bok+1;
if(In[nx][ny][nz]=='E') {
cout<<"Escaped in "<<map[nx][ny][nz]<< "minute(s)"<<'\n';
return ;
}
book tmp={nx,ny,nz};
Q.push(tmp);
}
}
cout<<"Trapped!";
}
int main(){
while(cin>>c&&cin>>k&&cin>>g&&c!=0&&k!=0&&g!=0){
memset(map,0,sizeof(book));
cin>>c>>k>>g;
if(c==0||k==0||g==0) break;
for(int i=1;i<=c;i++){
for(int j=1;j<=k;j++){
for(int m=1;m<=g;m++){
cin>>In[i][j][m];
if(In[i][j][m]=='S'){
book bk={i,j,m};
Q.push(bk);
map[i][j][m]=1;
}
if(In[i][j][m]='#') map[i][j][k]=99999;
}
}
}
bfs();
}
return 0;
}
问题出现在它没有输出!
求大佬神犇讲解!十分感谢!