1. 程式人生 > >格子問題 藍橋杯

格子問題 藍橋杯

esp 遞歸 位置 iostream 方法 ID mil 倒數 sin

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

格子問題 藍橋杯