题意为:一个n✲n的矩阵,从左上角开始,只能向下或向右移动,求解到达右下角有几种运动方案。
运动的过程假设可以把每停留的位置都有一个参数表示从最左上角到该位置的方案个数,则有如下情况:
这是一个3✲3的矩阵的方案。可以先确定两个边上的具体数值
每个点都有一个参数,可以将每个点按照位置来确定位置关系与系数关系:
如图所示,已知一个位置点的上面位置参数为2,左边参数为5,那么该点的参数值便也可以确定为2+5=7。推理:
由于一个位置只能向下走或者向右走,那么该位置的得到由其上方的位置或左边的位置向下或向右得到,如果是前者,有2种情况,后者,有5种情况,那么所有情况就是这两种的和。
已知这个规律,便可以在上面的方格中填充正确的数字了:
假设n=2,那么从左上角到右下角的方案个数正为6,可以做出以下推断:在n✲n的矩阵中,由于每一行共有n+1条线,共有n+1行,则可以列出一个a[n+1][n+1]的二维数组来存放每个点的相关参数,而a[n+1][n+1]即为所求值。
每个点a[i][j]=a[i-1][j]+a[i][j-1],表示两个相邻参数的和,以下图为杨辉三角的图像,我们可以借此图看出每个位置参数之间的关系
根据以上思路整理得代码如下:
#include <stdio.h>
#define MAX 20
void main()
{
int a[MAX][MAX]={0};
int i,j,n;
scanf("%d",&n);
for (i=0;i<=n;i++)
a[i][0]=a[0][i]=1;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
a[i][j]=a[i-1][j]+a[i][j-1];
printf("%d\n",a[n][n]);
}