站外题(最起码我没见过)求助!
  • 板块学术版
  • 楼主NCO_Dongfeng_MS
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/2/8 23:40
  • 上次更新2023/10/28 09:21:25
查看原帖
站外题(最起码我没见过)求助!
522847
NCO_Dongfeng_MS楼主2022/2/8 23:40

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;
}

问题出现在它没有输出!

求大佬神犇讲解!十分感谢!

2022/2/8 23:40
加载中...