格子問題 藍橋杯
阿新 • • 發佈:2018-04-17
esp 遞歸 位置 iostream 方法 ID mil 倒數 sin
return 0;
}
m*n的的方格中,起點在左上角,終點在右下角,從起點到終點,只能從上向下,從左向右走,問一共有多少種不同的走法。
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
解題思路:例如4*4的方格,從格子1走到15,所以第一步有兩種走法,向下走一步到5,或者向右走一步到2,在2位置又有兩種走法,實際上這與原問題區別只是起始坐標不同,遞歸解決。想象走到倒數第二步了,也就是15或者12的位置上,這時候就只有一種走法了,返回1。假設遞歸函數會超過網格的邊界,返回0.
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
比如3*3的走格子方法:12369,12569,12589,14569,14589,14789,一共六種方法
代碼:
#include<iostream>
using namespace std;
int steps(int x,int y,int m,int n){
if(x>m||y>n)
return 0;
if(x==m-1&&y==n)
return 1;
if(x==m&&y==n-1)
return 1;
return steps(x+1,y,m,n)+steps(x,y+1,m,n);
}
int main(){
int m,n;
cin>>m>>n;
cout<<steps(1,1,m,n)<<endl;
return 0;
}
格子問題 藍橋杯