方格(带对角线)的走法

题目

m×n的方格,如下图所示,从方格的左下角A走到(只能向上或向右或斜向上右走)方格的右上角B,请求出所有的路径方法总和。

方格(带对角线)

解答

1*1方格的情况

1*1方格的情况

从左下角到右上角走法,总共有3种走法。
即m=1,n=1 ,S(1,1)=1+1+1=3

m*1方格的情况

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方格的情况

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方格的情况

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方格的情况

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); 
}

走方格不带对角线的请参考:

http://blog.csdn.net/yybmec/article/details/44834547

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值