題意為:一個n?n的矩陣屯耸,從左上角開始拐迁,只能向下或向右移動,求解到達右下角有幾種運動方案疗绣。
運動的過程假設(shè)可以把每停留的位置都有一個參數(shù)表示從最左上角到該位置的方案個數(shù)线召,則有如下情況:
這是一個3?3的矩陣的方案缓淹」颍可以先確定兩個邊上的具體數(shù)值
每個點都有一個參數(shù),可以將每個點按照位置來確定位置關(guān)系與系數(shù)關(guān)系:
如圖所示讯壶,已知一個位置點的上面位置參數(shù)為2料仗,左邊參數(shù)為5,那么該點的參數(shù)值便也可以確定為2+5=7伏蚊。推理:
由于一個位置只能向下走或者向右走立轧,那么該位置的得到由其上方的位置或左邊的位置向下或向右得到,如果是前者躏吊,有2種情況氛改,后者,有5種情況比伏,那么所有情況就是這兩種的和胜卤。
已知這個規(guī)律,便可以在上面的方格中填充正確的數(shù)字了:
假設(shè)n=2赁项,那么從左上角到右下角的方案個數(shù)正為6葛躏,可以做出以下推斷:在n?n的矩陣中,由于每一行共有n+1條線肤舞,共有n+1行紫新,則可以列出一個a[n+1][n+1]的二維數(shù)組來存放每個點的相關(guān)參數(shù),而a[n+1][n+1]即為所求值李剖。
每個點a[i][j]=a[i-1][j]+a[i][j-1]芒率,表示兩個相鄰參數(shù)的和,以下圖為楊輝三角的圖像篙顺,我們可以借此圖看出每個位置參數(shù)之間的關(guān)系
根據(jù)以上思路整理得代碼如下:
#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]);
}