题目
本题链接:走方格的方案数
请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路, 即:只能往右和往下走,不能往左和往上走。
输入描述:
每组样例输入两个正整数n和m,用空格隔开。(1≤n,m≤8)
输出描述:
每组样例输出一行结果
示例:
解题思路:
本题可以采用递归的思想,通过从右下角走到左上角来解决问题。
- 当从右下角,到达左上角:就是从1位置,到达左上角的路径数+2位置到达左上角的路径数。f([m][n]):就是从m,n位置到达左上角的路径。此时:f([m][n]) = f([m-1][n]) + f([m][n-1])
- 从1位置到达左上角的路径数,就是从3位置,到达左上角的路径数+从4位置,到达左上角的路径数:f([m][n-1]) = f([m][n-2]) + f([m-1][n-1])
- 从某位置到达左上角的路径数都以此类推。
- 因为只能往左或者往上走,所以当m = 0或 n = 0时,就只有一条路径。
代码:
#include<iostream>
using namespace std;
int pathNum(int m, int n)
{
if(m == 0 || n == 0)
return 1;
return pathNum(m - 1, n) + pathNum(m, n - 1);
}
int main()
{
int m, n;
while(cin >> m >>n)
{
cout << pathNum(m, n) << endl;
}
return 0;
}