題意為:一個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]);
}