【发布时间】:2021-03-09 15:25:55
【问题描述】:
为什么会出现分段错误?我正在尝试解决迷宫问题中的老鼠。
下面是给我分段错误的代码
可能有一些错误将二维数组传递给函数,但对我来说似乎没问题
我已经在函数 rinm 中应用了基本条件,并从 main() 传递了解矩阵以及用户输入矩阵。
bool rinm(int** maze,int** sol,int n, int x, int y)
{
if(x==n-1 && y==n-1)
{
sol[x][y]=1;
//print the path
for (int i = 0; i < n; ++i)
{
/* code */
for (int j = 0; j < n; ++j)
{
cout<<sol[i][j]<<" ";
}
cout<<endl;
}
return true;
}
else if(x<0 || y<0 || x>=n || y>=n || maze[x][y]==0)
{
return false;
}
sol[x][y]=1;
bool up=rinm(maze,sol,n,x-1,y);
bool down=rinm(maze,sol,n,x+1,y);
bool right=rinm(maze,sol,n,x,y+1);
bool left = rinm(maze,sol,n,x,y-1);
sol[x][y]=0;
if(up||down||right||left)
{
return true;
}
}
这是我的主要功能。
int main()
{
int n;
cin>>n;
int** maze=new int*[n];//rows
for (int i = 0; i < n; ++i)
{
maze[i]=new int [n]; // columns
}
for (int i = 0; i < n; ++i)
{
for(int j=0; j<n;j++)
{
cin>>maze[i][j];
}
}
int** sol=new int*[n];
for (int i = 0; i < n; ++i)
{
sol[i]=new int [n]; // columns
}
for (int i = 0; i < n; ++i)
{
for(int j=0; j<n;j++)
{
sol[i][j]=0;
}
}
bool path=rinm(maze,sol,n,0,0);
if(path==false)
cout<<"path doesnot exist\n";
return 0;
}
我哪里错了?
【问题讨论】:
-
这个循环将无限工作,因为您没有存储任何访问过的状态数组。假设输入是
2 1 1 0 1,那么你通过 up 和 down 函数调用不断地重新访问 1 -
你能指定
rat in a maze problem是什么吗? -
@risingStark 你能详细说明我需要修改什么吗?我已经添加了基本条件以及何时需要返回 false....
-
@risingStark 你能详细说明我需要修改什么吗?我已经添加了基本条件以及何时需要返回 false....
-
在调试器中运行时会发生什么 - 您可以看到失败的行和变量的值
标签: c++ data-structures segmentation-fault backtracking