本课程是从少年编程网转载的课程,目标是向中学生详细介绍计算机比赛涉及的编程语言,数据结构和算法。编程学习最好使用计算机,请登陆 www.3dian14.org (免费注册,免费学习)。
之前我们已经讨论了采用回溯(Backtracking)方法来解决国际象棋中马的遍历问题。
为了让大家更加熟悉回溯方法,我们将在后面的课程中再分析几个例子。
今天先看一个使用回溯方法解决老鼠走迷宫的问题。
下图是一个迷宫,其中涂上灰色的方格,老鼠不能进入,请找出老鼠从起点到终点的线路。老鼠只能向两个方向移动:向前和向下,在下面的例子中也就是只能向右或向下移动。(注意,这是迷宫问题的一个简单版本。 而在更复杂的版本中,老鼠可以在4个方向上移动或甚至可以跳着走)
下图表示一条从起点到终点的可行路径。
算法思路
我们把老鼠迷宫问题做一个抽象。
假设迷宫是一个N*N的二维矩阵(矩阵简称为M),矩阵中的每个元素M[i][j](0≤i≤N-1,0≤j≤N-1)是一个单元格方块。
其中最左上方的块,即M[0][0]是老鼠出发的格子,而最右下的格子M[N-1][N-1]是它的出口。
问题就变成从格子M[0][0]开始,寻找到达M[N