修练者
这个题主要的任务就是找到递推式:
由于兵只能向右和向下移动,所以每一个点的路径数等于它上面一个点和它左边一个点的路径数之和
f [ i ] [ j ] = f [ i − 1 ] [ j ] + f [ i ] [ j − 1 ] {f[i][j]=f[i-1][j]+f[i][j-1]}f[i][j]=f[i−1][j]+f[i][j−1]
初始条件
为了在写递推循环时不需要考虑数组小标越界问题,我们可以把以0为行数或者列数的单元格的路线数预计算出来,这样在循环时可以直接从1开始数组下标恒大于0不会越界!
首行的每个单元格若不受**控制点影响,初始化为1;若位于**控制点,赋值为0,同时后面的所有点都不可能到达,所以赋值为0
列的情况同理
f [ 0 ] [ j ] = { 1 , 不是**控制点 0 , 是**控制点及**控制点以右的点 f[0][j]=
{1,0,不是**控制点是**控制点及**控制点以右的点
{1,不是**控制点0,是**控制点及**控制点以右的点
f[0][j]={
1,
0,
不是**控制点
是**控制点及**控制点以右的点
f [ i ] [ 0 ] = { 1 , 不是**控制点 0 , 是**控制点及**控制点以下的点 f[i][0]=
{1,0,不是**控制点是**控制点及**控制点以下的点
{1,不是**控制点0,是**控制点及**控制点以下的点
f[i][0]={
1,
0,
不是**控制点
是**控制点及**控制点以下的点
限制条件
我们需要计算出**控制点,可以预先打出一张马跳动范围的横纵坐标表,然后循环判断是否满足条件后在标记数组中给该点打上标记,具体实现可以看我下面的代码
注意:不要忘了给**点自己打上标记