我试图编写一个递归地解决特定输入迷宫的程序,并在每次移动后输出它在迷宫中的位置。
每当我尝试运行我的代码时,它立即崩溃,我得到一个" 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?
}
答案 0 :(得分:3)
首次调用main
时,运行时环境会传递参数,因此您的默认参数不会被使用。重命名该函数并从main
调用它。
答案 1 :(得分:0)
这背后可能有一个很好的理由,但我不确定为什么你忽略你的16作为最大宽度的const int而不是17。可能无法解决问题,但这对我来说确实是错误的。
同样评论者说为什么要在主要括号内初始化X和Y?为什么不在main中进行。或者正如另一张海报所说,将主要功能转换为一个单独的功能,然后在一个新的主要功能中调用它。