C++ 用递归求解C++;?
我试图创建一个程序,可以通过递归解决迷宫。我的代码基于几个可以在网上找到的步骤,特别是:C++ 用递归求解C++;?,c++,recursion,maze,C++,Recursion,Maze,我试图创建一个程序,可以通过递归解决迷宫。我的代码基于几个可以在网上找到的步骤,特别是: 如果(x,y在迷宫外)返回false 如果(x,y是目标)返回true 如果(x,y未打开)返回false 将x、y标记为解决方案路径的一部分 if(FIND-PATH(x,y以北)=true)返回true if(FIND-PATH(x,y以东)=true)返回true if(FIND-PATH(x,y以南)=true)返回true if(FIND-PATH(x,y以西)=true)返回true 取消将x、
bool path (string maze[], int x, int y){
values val;
bool check;
//for (int k=0; k<val.xDim; k++) cout<<maze[k]<<endl;
cout<<x<<":"<<y<<endl;
if (x>val.xDim || y>val.yDim || x<0 || y<0) {cout<<"end\n"; return false; }
if (maze[x][y]=='x') return true; //If exit is reached
if (maze[x][y]=='%' || maze[x][y]=='+') return false; //If space is filled
maze[x][y]='+';
if (path(maze, x-1, y)==true) return true;
cout<<"endtwo\n";
if (check=path(maze, x, y+1)==true) return true;
if (path(maze, x+1, y)==true) return true;
if (path(maze, x, y-1)==true) return true;
maze[x][y]='.';
return false;
}
int main(){
if (path(maze, val.startX-1, val.startY)==true) {
for (int k=0; k<val.xDim; k++) cout<<maze[k]<<endl;
} else cout<<"No solution found.\n";
}
输出:
-1:1
end
No solution found.
据我所知,路径方法应该首先检查入口正上方的空间,该空间位于迷宫之外(返回false)。接下来,它应该检查east(以此类推)。但是,当我运行它时,函数返回false,并且无法继续执行以下if语句。这可以通过打印“end”而不是“endtwo”(在北向检查后找到)这一事实来说明。我不确定我的递归逻辑或我的递归实现是否存在某种形式的问题,所以我希望对此有一些澄清
提前谢谢 您的第一次签入
bool path(…)
发现x您从一个无效位置开始,因此,如果(path(maze,val.startX-1,val.startY)==true){,请尝试此如果(path(maze,val.startX,val.startY)==true){
。如果您不介意将迷宫中的'e'
替换为',实际的递归部分对我来说似乎没什么问题。
我不确定,但我觉得这个问题最适合@anakata-我认为那个网站不适合这个问题,因为这些网站通常面向编程难题/问题的最短解决方案,而这是一个编程/调试问题。该网站是。据我所知,该算法检查迷宫中任何特定点的出口是否存在路径。values val是什么?它看起来是声明和使用的,但从未初始化过。哦,对不起。values只是一个n包含一些整数。我对使用继承不太熟悉,所以我将维度和起始位置作为公共整数放在“值”中为了避免将许多值传递给path。当然,这并不意味着算法的其余部分是好的:P我没有测试它!这太尴尬了。我检查了所有其他内容,但没有意识到我原来的调用是错误的。我甚至不记得为什么一开始就有-1。非常感谢!
-1:1
end
No solution found.