一道bfs的题目
不同在于他并不是一个二维的迷宫,是一个三维的迷宫。
但其实什么都没有变,简单的bfs就能出答案
struct node{
int x,y,z;
int step;
};
queue <struct node> q;
struct node head;
char map[40][40][40];//图
int vis[40][40][40];//标记数组
int level,h,l,_x,_y,_z;
//level:层数 h:行数 l:列数
//_x:终点层数 _y:终点行数 _z:终点列数
int dv[6][3] = {{-1,0,0},{1,0,0},{0,-1,0},{0,1,0},{0,0,-1},{0,0,1}};//六个方向
//主函数
int main(){
while (cin >> level >> h >> l) {
if (level == 0) break;
Init();
bfs();
}
return 0;
}
void Init(){
memset(map, '0', sizeof(map));
memset(vis, 0, sizeof(vis));
read();//读图
struct node tmp;
for (int i=0; i<level; i++){
for (int j=0; j<h; j++){
for (int k=0; k<l; k++){
if (map[i][j][k] == 'S'){
tmp.x = i;
tmp.y = j;
tmp.z = k;
tmp.step = 0;
}
if (map[i][j][k] == 'E'){
_x = i;
_y = j;
_z = k;
}
}
}
}//找起点终点
while (!q.empty()) q.pop();//清空队列
q.push(tmp);//起点
}
void read(){
for (int i=0; i<level; i++){
for (int j=0; j<h; j++){
for (int k=0; k<l; k++){
cin >> map[i][j][k];
}
}
}
}
//循规蹈矩的深搜。。
void bfs(){
while (!q.empty()) {
head = q.front();
q.pop();
for (int i=0; i<6; i++){
int a_x = head.x + dv[i][0];
int a_y = head.y + dv[i][1];
int a_z = head.z + dv[i][2];
if (a_x < 0 || a_y < 0 || a_z < 0 || a_x >= level || a_y >= h || a_z >= l)
continue;
if (a_x == _x && a_y == _y && a_z == _z){
cout << "Escaped in " << head.step + 1 <<" minute(s)."<< endl;
return;
}
if (map[a_x][a_y][a_z] == '#' || vis[a_x][a_y][a_z] == 1)
continue;
struct node tmp;
tmp.x = a_x;tmp.y = a_y;tmp.z = a_z;tmp.step = head.step + 1;
q.push(tmp);
vis[a_x][a_y][a_z] ++;
}
}
cout << "Trapped!" << endl;
}