我正在尝试创建一个可以通过递归解决迷宫的程序。我的代码基于可以在网上找到的几个步骤,特别是:
我已经看到了这个算法的另外两个问题,但我很确定这些问题并不完全相同。
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";
}
样本迷宫为(其中e为入口,x为出口):
%e%%%%%%%%%
%...%.%...%
%.%.%.%.%%%
%.%.......%
%.%%%%.%%.%
%.%.....%.%
%%%%%%%%%x%
输出:
-1:1
end
No solution found.
据我所知,路径方法应该从检查入口正上方的空间开始,该空间位于迷宫之外(返回false)。接下来,它应该检查east(以此类推)。但是,当我运行它时,函数返回false,并且无法继续执行以下if语句。这一点可以通过打印“end”而不是“endtwo”(在north check之后找到)这一事实来证明。我不确定我的递归逻辑或我的递归实现是否存在某种形式的问题,所以我希望对此有一些澄清。
提前谢谢!
你从一个无效的位置开始,所以不要用这个if(path(maze,val.startX-1,val.startY)==true){
,试试这个if(path(maze,val.startX,val.startY)==true){
。实际的递归部分对我来说似乎没问题,只要你不介意用'替换迷宫中的
。'e'
。
您的第一次签入bool路径(…)
查找x
你应该从一个有效的位置开始你的支票。
所以,我有一个作业,要求我用递归解一个迷宫。我会把作业指导贴出来,这样你就能明白我在说什么了。教授没怎么解释递归,他给了我们一些递归的例子,我会发布这些例子,但我希望有人能给我一个更深入的递归解释,以及我如何将其应用于解决迷宫。我不是要求任何人编写代码,我只是希望一些解释能让我走上正确的道路。感谢所有回答的人。 以下是我的例子: 以下是指南: 你要创建一个迷宫爬虫能够解决任何迷宫你给它递归的力量!
我得到了一些构建迷宫的代码,以及任何其他需要的东西,抽象迷宫类包含一个抽象方法“makeMove(int row,int col)”。这是我试图编写的解决迷宫的方法,向左、向右、向上、向下移动。 我刚刚开始做这件事,下面是我到目前为止的全部资料。 好的,我让代码运行到不再出现错误的地方。 感谢所有的帮助。
我正在尝试寻找到EndPotion的路径。这是一个递归函数。请帮助,我要自杀了。 这是给定的地图 我想递归地使用GetPath来到达上面地图中的EndPotion。参数是当前位置、结束位置和地图。对于这个例子,起始位置是(0,0)和结束,EndPotionis是(0,3),右上角。0代表墙壁,1代表路径。 我需要返回一个包含有效点的arraylist到结束位置。虽然我的数组大小始终为0,并且基本大
我的任务是用回溯和递归的方法解决一个迷宫。这更多的是一个关于这个概念的概念问题。 回溯电话是如何接通的?从我所看到的所有示例来看,似乎递归总是在回溯步骤之前立即调用,所以回溯是无法实现的。谁能给我解释一下回溯步骤是怎么达到的?
嗨~我被这个问题困住了。有人请帮帮我!!!! 问题是程序会要求用户输入一个4到20之间的数字来决定迷宫的大小。它稍后会要求用户逐行输入迷宫的内容并将其存储到2D bool数组中(true表示阻塞,false表示清除)。然后程序从左上角开始,并尝试找到一条通往右下角的路径(可以向右、向左、向上、向下移动)。此时,程序还应该维护另一个char数组,该数组记录找到的路径(如果有的话)并在处理结束时打印出
我在用递归解迷宫。我的矩阵是这样的 这是更大矩阵的原型。我的求解递归方法如下所示 你们可以注意到,这里我返回一个布尔值,如果我找到一条路径,它应该会给我一个真值。但它总是给我错误的答案。我不确定我在递归方法中犯的逻辑错误。方法如下 endX=3;endY=10;