视频字幕
今天我们来学习经典的迷宫问题。这是一道关于在网格中寻找路径的算法题。我们需要在n乘n的迷宫中,判断是否存在从起点A到终点B的可行路径。迷宫中点号表示可以通行,井号表示障碍物,我们只能向上下左右四个方向移动。
解决迷宫问题的核心算法是深度优先搜索,简称DFS。DFS使用递归的思想,从当前位置出发,依次尝试上下左右四个方向。如果某个方向可以继续前进,就递归地在那个方向继续搜索。当所有方向都走不通时,算法会自动回溯到上一个位置,尝试其他可能的路径。
现在让我们通过动画来观察DFS递归搜索的具体过程。蓝色圆点表示当前搜索位置,绿色是起点,红色是终点。算法从起点开始,依次尝试四个方向,当遇到障碍物或已访问的位置时会回溯,直到找到通往终点的路径或确认无解。
现在我们来看回溯的过程。当DFS算法遇到死路时,它会自动返回到上一个位置,尝试其他方向。这个例子中,从起点向右走会遇到死路,算法会回溯到起点,然后尝试向下的路径,最终找到正确的解。回溯是递归算法的核心特性。
最后我们来看完整的C++代码实现。DFS函数接收当前坐标、目标坐标、迷宫网格和访问标记数组。首先检查边界条件和终止条件,然后标记当前位置为已访问,接着尝试四个方向的递归调用。主函数处理输入输出,特别注意要检查起点和终点是否为障碍物。这就是用递归和回溯解决迷宫问题的完整方案。