为什么此代码会产生运行时错误。我试图找到他们是否存在迷宫内的路径以到达食物(2)。 0表示障碍物,1表示路径,2表示目的地。
`{0,1,1,0,0},
{1,0,1,1,1},
{0,0,0,0,0},
{0,1,1,1,1},
{0,0,1,1,0},
{1,0,1,1,2}`
我将起点作为findpath(a,3,2)
传递,其中a是迷宫,i=3
,j=2
作为起点。
关于ideone的代码:http://ideone.com/poF9um
谢谢你们,帮助我。我纠正了我的错误。 这是更新代码的ideone链接:http://ideone.com/poF9um 感谢。
#include <iostream>
using namespace std;
/*int insideMaze(int x, int y){
if(x>=6 || y >=5 || x<0 || y< 0)
{
return 0;
}
return 1;
}*/
bool findPath(int a[6][5], int n1, int m1){
if(n1>=6 || m1 >=5 || n1<0 || m1<0){
return false;
}
if(a[n1][m1] == 0){
return false;
}
if(a[n1][m1]==2){
return true;
}
//a[n1][m1] = 4;
if(findPath(a,n1-1,m1)==true){
return true;
}
if(findPath(a,n1,m1-1)==true){
return true;
}
if(findPath(a,n1+1,m1)==true){
return true;
}
if(findPath(a,n1,m1+1)==true){
return true;
}
return false;
}
int main() {
// your code goes here
//int a[10][10];
int a[6][5] = {
{0,1,1,0,0},
{1,0,1,1,1},
{0,0,0,0,0},
{0,1,1,1,1},
{0,0,1,1,0},
{1,0,1,1,2}
};
if(findPath(a,3,2)){
cout<<"Path Found";
}
return 0;
}
答案 0 :(得分:2)
问题是由堆栈溢出引起的。您的深度优先搜索不会标记其访问的位置,因此会多次访问相同的位置。
(3, 2)
开始,然后尝试向左走。(3, 1)
。(3, 1)
没有路径,所以你走右。(3, 2)
,从那里尝试向左走。(3, 1)
。(3, 1)
没有路径,所以你走对了...... 看到问题?要修复它,请添加您访问过的另一个点阵列,并在继续搜索之前进行检查。这将解决问题。
答案 1 :(得分:1)
我猜这段代码会导致无限递归调用。 首先执行findPath(a,3,2)。 由于[3] [2] == 1,代码将调用findPath(a,3,1)。 现在,由于[3] [1] == 1,代码将再次再次调用findPath(a,3,2)... 等等......直到你的内存/堆栈溢出耗尽......