题目
m×n的方格,如下图所示,从方格的左下角A走到(只能向上或向右或斜向上右走)方格的右上角B,请求出所有的路径方法总和。
解答
1*1方格的情况
从左下角到右上角走法,总共有3种走法。
即m=1,n=1 ,S(1,1)=1+1+1=3
m*1方格的情况
从左下角到右上角走法,总共有S(m-1,1)+2种走法。
即m=m,n=1 ,S(m,1)=S(m-1,1)+1+1=S(m-1,1)
+2
1*n方格的情况
从左下角到右上角走法,总共有S(1,n-1)+2种走法。
即m=1,n=n ,S(1,n)=S(1,n-1)+1+1=S(1,n-1)
+2
2*2方格的情况
从左下角到右上角走法,总共有S(2,1)+S(1,2)+S(1,1)种走法。
即m=2,n=2 ,S(2,2)=S(2,1)+S(1,2)+S(1,1)=13
m*n方格的情况
从左下角到右上角走法,总共有S(m-1,n)+S(m,n-1)+S(m-1,n-1)种走法。
即m=m,n=n ,S(m,n)=S(m-1,n)+S(m,n-1)+S(m-1,n-1)
代码
C++程序语言实现
int getSumStepAToB1(int m, int n){
if(m<=0 || n<=0) return -1;
if(m==1 && n==1) return 3;
if(m==1 && n>1) return getSumStepAToB1(1, n-1)+2;
if(m>1 && n==1) return getSumStepAToB1(m-1, 1)+2;
return getSumStepAToB1(m, n-1) + getSumStepAToB1(m-1, n) + getSumStepAToB1(m-1, n-1);
}
走方格不带对角线的请参考: