分段错误试图递归解决迷宫

时间:2014-10-25 07:00:54

标签: c++ c++11 segmentation-fault maze

这是我的代码。我已经阅读了如何使用递归算法来解决迷宫,这应该可行,但我不断得到分段错误,我不知道为什么。如果你可以帮助我那将是伟大的。感谢。

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;
}

2 个答案:

答案 0 :(得分:1)

FindPath()似乎不会避免反复进入同一个房间,这很容易导致测试路径中的循环。例如,它将尝试无限地在两个相邻房间之间反复前进和后退。

这导致更深入和更深的递归,最终导致堆栈溢出。这是堆栈溢出可能是分段的原因。

答案 1 :(得分:0)

你需要检查x和y是否在函数顶部的边界内,这应该可以解决你的崩溃问题。