动不了一点 2024-03-18 11:35 采纳率: 17.2%
浏览 2

为什么这个搜索死循环了

为什么这个搜索死循环了


```c++
#include "iostream"
#include "queue"
using namespace std;
char map[32][32][32];
int bookmap1[32][32][32];
int g;
int next1[6][3] = { {0,1,0},{0,-1,0},{0,0,1},{0,0,-1},{1,0,0},{-1,0,0} };
int l, r, c;
int temp = 0;
struct point {
    int z;
    int x;
    int y;
    int step;
};
int main() {
    queue<point> q;
    cin >> l >> r >> c;
    while (1) {
        g = 0;
        if (l == 0 && r == 0 && c == 0)break;
        for (int i = 0; i < l; i++, temp++) {
            {
                for (int j = 0; j < r; j++)
                    for (int z = 0; z < c; z++)
                    {
                        cin >> map[temp][j][z];
                        if (map[temp][j][z] == 'S')
                        {
                            q.push({ temp,j,z,0 });
                            map[temp][j][z] = '#';
                        }
                    }
                
            }
        }
        while (!q.empty()) {
            point t = q.front();
            q.pop();
            for (int i = 0; i < 6; i++) {
                int tz = t.z + next1[i][0];
                int tx = t.x + next1[i][1];
                int ty = t.y + next1[i][2];
                if (tz < 0 || tz >= l || tx < 0 || tx >= r || ty < 0 || ty >= c || map[tz][tx][ty] == '#' || bookmap1[tx][ty][tz] == 1)continue;
                if (map[tz][tx][ty] == '.') {
                    q.push(point{ tz,tx,ty,t.step + 1 });
                    bookmap1[tz][tx][ty] = 1;
                    break;
                }
                if (map[tz][tx][ty] == 'E')
                {
                    g = 1;
                    printf("Escaped in %d minute(s).\n", t.step + 1);
                    while (!q.empty()) q.pop(); // 4. 退出循环
                    break;
                    
                }
            }

        }
        if (g == 0)
            cout << "Trapped!" << endl;
        for (int i = 0; i < l; i++) {
            for (int j = 0; j < r; j++) {
                for (int z = 0; z < c; z++) {
                    bookmap1[i][j][z] = 0;
                }
            }
        }
        temp = 0;
        cin >> l >> r >> c;
    }

    return 0;
}


![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/b449a0f2c54748e4810e5f2e78784b91.png "#left")
  • 写回答

4条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-03-18 11:35
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题:为什么这个搜索死循环了? 分析:这个程序大致上是一个搜索迷宫的程序,通过给出的起点和终点,寻找从起点到终点的最短路径。程序的整体逻辑是,先通过输入获取地图(一个三维数组),然后将起点入队,然后使用BFS搜索终点,同时将已探索的位置标记为1,最后循环输出结果。但是,代码中没有明确的退出条件,也就是说,只有当输入的三个数都为0时程序才会退出,但是在输入数值结束前,如果没有任何一组输入可以到达终点,那么程序就会出现死循环。 解决方法:需要加上一个判断,当输入的数值都为0时,直接退出循环即可。可以在每次输入完三个数值之后加上判断,代码如下: if(l==0 && r==0 && c==0){
    break;
    

    }

    评论

报告相同问题?

问题事件

  • 创建了问题 3月18日

悬赏问题

  • ¥15 (标签-android|关键词-app)
  • ¥15 微信小程序web-view嵌套H5页面IOS左滑会出现相同的页面,有什么解决方法吗?
  • ¥60 如何批量获取json的url
  • ¥15 comsol仿真压阻传感器
  • ¥15 Python线性规划函数optimize.linprog求解为整数
  • ¥15 llama3中文版微调
  • ¥15 pg数据库导入数据序列重复
  • ¥15 三分类机器学习模型可视化分析
  • ¥15 本地测试网站127.0.0.1 已拒绝连接,如何解决?(标签-ubuntu)
  • ¥50 Qt在release捕获异常并跟踪堆栈(有Demo,跑一下环境再回答)