【问题标题】:Why does my maze solver not work?为什么我的迷宫求解器不起作用?
【发布时间】:2014-11-24 22:41:49
【问题描述】:

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

每当我尝试运行我的代码时,它都会立即崩溃并且我收到“maze.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?
}

【问题讨论】:

  • "int main(int X = 0, int Y = 0)" -- 哇哦。你的编译器不会警告你吗?
  • 不,一切都 100% 编译,没有错误。
  • 你能连接一个调试器并获得失败的堆栈跟踪吗?
  • 不允许在代码中显式调用main。 /线程
  • @DeniseSkidmore:稍微好一点(不使用误导性的array-is-really-a-pointer 语法):int main(int argc, char** argv)

标签: c++ arrays c++11 maze


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    也像评论者所说,为什么在主括号内初始化 X 和 Y?为什么不直接在 main 里面做呢?或者正如另一位发帖人所说,将 main 函数变成一个单独的函数,然后在新的 main 中调用它。

    【讨论】:

      猜你喜欢
      • 2011-09-22
      • 1970-01-01
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 2023-01-09
      相关资源
      最近更新 更多