这是一个迷宫解决程序。它应该与包含迷宫的txt文件一起运行,格式为:
5 5
%%%%%
S % %
% % %
% E
%%%%%
前两个数字应该是迷宫的宽度和高度,“%”应该是墙壁,“ S”是开始,“ E”是结束,在求解路径上标记“ *”,并将“〜”标记为尝试但失败的路径。
这是我的solveMazeDFS代码:
int solveMazeDFS(maze_t * maze, int col, int row)
{ //This is line 102
if(col < 0 || row < 0 || col >= maze->width || row >= maze->height){
return 0;
}
if(maze->cells[row][col] == '%' || maze->cells[row][col] == '~'){
return 0;
}
if(maze->cells[row][col] == 'E'){
return 1;
}
if(maze->cells[row][col] == ' '){
maze->cells[row][col] = '*';
}
if(solveMazeDFS(maze, col - 1, row) == 1){
return 1;
}
if(solveMazeDFS(maze, col + 1, row) == 1){
return 1;
}
if(solveMazeDFS(maze, col, row - 1) == 1){
return 1;
}
if(solveMazeDFS(maze, col, row + 1) == 1){
return 1;
}
maze->cells[row][col] = '~';
return 0;
}
为此,我不断遇到细分错误。我使用valgrind运行代码以查看到底哪里有问题,它告诉我线程#1中的堆栈溢出:在0x400AED处无法将堆栈增长到0x1ffe801000:solveMazeDFS(maze.c:102) 所以基本上第102行是intsolveMazeDFS(maze_t * maze,int col,int row)之后的左花括号。我对此并不陌生,说实话在这一点上很失落。
答案 0 :(得分:0)
if(maze->cells[row][col] == ' '){
maze->cells[row][col] = '*';
}
这里需要一个else return 0;
。否则,您可以无限地来回移动。如果正方形已经被占用,我们将无法再次获取。