本课程是从少年编程网转载的课程,目标是向中学生详细介绍计算机比赛涉及的编程语言,数据结构和算法。编程学习最好使用计算机,请登陆 www.3dian14.org (免费注册,免费学习)。
之前我们讨论了迷宫中的老鼠的例子。现在我们改变老鼠走迷宫的条件,允许老鼠一次走多个格子。
我们用下面的例子来描述新的老鼠走迷宫的问题。
上图是一个N * N 二维矩阵形状的迷宫(矩阵简称为M),有一只老鼠从左上角的单元格,即M [0] [0]出发,试图走到右下角的出口,即M[N-1][N-1]。灰色的方格表示死胡同,不允许老鼠进入。老鼠可以向下或向右移动。与上一题不同的是,现在允许老鼠每次移动一个或多个格子,但是允许移动的格子数是有规定的,具体规定由下面的矩阵来描述。
上面的矩阵指定了从每个方格M[i][j](0≤i≤N-1,0≤j≤N-1)中,大鼠可以向右移动多个格子(例如:到M[i][j+s]),或向下的若干格子(例如:到M [i+s][j]),其中最大步数(或s的最大值)由单元格中的值M[i][j]来限定。如果任何方格包含0,那么这是一个死胡同。例如:M[0][0]的值是2,表示老鼠最多一次可以跳转2步,它可以从M[0][0]跳转到以下任何一个方格:M[0][1],M[0][2],M[1][0]或M[2][0]。但由于单元格M[1][0]的值是0,死胡同,实际上老鼠不能进入该单元格,所以老鼠实际可以从M[0][0]跳转到的有效单元方格是:M[0][1],M[0][2]或M[2][0]。
上面例子的一个可能的路径如下图所示。
如果用大小为N * N的矩阵的形式打印从老鼠M[0][0]跳跃到M[N-1][N-1]的可能路径,并且使处于路径中的所有单元格的值为1,而不在路径中的其他单元格的值为0。那么上面例子的对应路径如下图所示。