为什么我的迷宫求解器不起作用

Why does my maze solver not work?

本文关键字:不起作用 我的 迷宫 为什么      更新时间:2023-10-16

我正在尝试编写一个程序,该程序可以递归地解决特定的输入迷宫,并在每次移动后输出其在迷宫中的位置。

每当我尝试运行我的代码时,它都会立即崩溃,并且出现"迷宫.exe已停止工作"错误。

为什么我的代码不起作用?

    #include <iostream>
#include <stdio.h>
using namespace std;
const int MazeHeight = 12;
const int MazeWidth = 16;
char Maze[MazeHeight][MazeWidth + 1] =
{
    {'S','.','.','.','.','#','.','.','.','#','.','.','.','.','.','.'},
    {'#','#','#','#','.','#','.','#','.','#','.','#','#','#','#','.'},
    {'.','.','.','.','.','#','.','#','.','.','.','#','.','#','#','.'},
    {'.','#','#','#','#','#','.','#','.','.','.','#','.','#','#','.'},
    {'.','.','.','.','.','.','.','#','.','#','#','#','.','#','#','.'},
    {'#','#','#','#','#','#','#','#','.','#','.','.','.','.','.','.'},
    {'.','.','.','.','.','.','.','.','.','#','#','#','#','#','#','.'},
    {'.','#','#','#','#','#','#','#','.','.','.','#','.','.','.','.'},
    {'.','.','.','.','.','.','.','#','#','#','.','#','#','#','#','#'},
    {'#','#','#','#','#','#','#','#','.','.','.','.','.','.','.','.'},
    {'.','.','.','.','.','.','.','#','#','#','#','#','#','#','#','.'},
    {'G','#','#','#','#','#','.','.','.','.','.','.','.','.','.','.'},
};

const char Wall = '#';
const char Free = '.';
const char Start = 'S';
const char End = 'G';
int solve(int X = 0, int Y = 0)
{
    while(Maze[Y][X] != End){
    if (Maze[Y][X] == End)
    {
        cout << X << Y << endl;
    }   
    else if (X > 0 && Maze[Y][X - 1] == Free && solve(X - 1, Y))
    {
        cout << X << Y << endl;
    }
    else if (X < MazeWidth && Maze[Y][X + 1] == Free && solve(X + 1, Y))
    {
        cout << X << Y << endl;
    }
    else if (Y > 0 && Maze[Y - 1][X] == Free && solve(X, Y - 1))
    {
        cout << X << Y << endl;
    }
    else if(Y < MazeHeight && Maze[Y + 1][X] == Free && solve(X, Y + 1))
    {
        cout << X << Y << endl;
    }
    else Maze[Y][X] = Free;
    }
    return 0;
}
int main(int argc, char** argv){
    // how do i call from here?
}

首次调用main时,运行时环境会向其传递参数,因此不使用默认参数。 重命名函数并从 main 调用它。

这背后可能有一个很好的理由,但我不确定为什么你忽略你的 const int 16 作为最大宽度并使其成为 17。可能无法解决问题,但对我来说肯定是错误的。

也像评论者说为什么要在main的括号内初始化X和Y?为什么不直接在主内部进行。或者正如另一张海报所说,将该主函数转换为单独的函数,然后在新的主函数中调用它。