这是我的代码。我已经阅读了如何使用递归算法来解决迷宫,这应该可行,但我不断得到分段错误,我不知道为什么。如果你可以帮助我那将是伟大的。感谢。
bool FindPath(Maze& m, int x, int y){
RoomType rt = m.GetRoomType(x,y);
if (rt == RoomType::Outside)
return false;
if (rt == RoomType::Treasure){
return true;
}
if (rt == RoomType::Wall)
return false;
m.MarkPath(x,y);
if (FindPath(m,x,y-1) == true){
return true;
}
if (FindPath(m,x+1,y) == true){
return true;
}
if (FindPath(m,x,y+1) == true){
return true;
}
if (FindPath(m,x-1,y) == true){
return true;
}
m.ClearPath(x,y);
return false;
}
答案 0 :(得分:1)
FindPath()
似乎不会避免反复进入同一个房间,这很容易导致测试路径中的循环。例如,它将尝试无限地在两个相邻房间之间反复前进和后退。
这导致更深入和更深的递归,最终导致堆栈溢出。这是堆栈溢出可能是分段的原因。
答案 1 :(得分:0)
你需要检查x和y是否在函数顶部的边界内,这应该可以解决你的崩溃问题。