c++蓝桥杯中级数字组合

查找路径
描述

有一张 m×n 个小方格的地图,

微信截图_20230301164904.png

一个机器人位于地图的左上角(如图标记为Start 的地方),它每步只能向右或者向下移动一格,

如果走到右下角的终点(如图标记为 Finish 的地方),有多少种不同的方法?

例如,一个 3×2 的地图,行走的方法数是 3 种,分别是:

  1. 右 -> 右 -> 下

  2. 右 -> 下 -> 右

  3. 下 -> 右 -> 右

输入
两个整数 m( 0 < m <= 100 )和 n( n <= 100),代表地图的行数和列数。

输出
一个整数,表示行走的方法数。

输入样例 1

8 8
输出样例 1

3432
语言:c++

题目是:查找路径

给你提示,这是深度搜索问题,主要是判断边界,记录行走路径和回溯

该回答引用GPTᴼᴾᴱᴺᴬᴵ
这是一道经典的动态规划问题,可以使用递归或者迭代的方式进行求解。以下是使用迭代方式求解的代码示例:

#include <iostream>
using namespace std;

const int MAXN = 110;
int dp[MAXN][MAXN];

int main() {
    int m, n;
    cin >> m >> n;

    // 初始化边界条件
    for (int i = 1; i <= m; i++) {
        dp[i][1] = 1;
    }
    for (int j = 1; j <= n; j++) {
        dp[1][j] = 1;
    }

    // 递推求解
    for (int i = 2; i <= m; i++) {
        for (int j = 2; j <= n; j++) {
            dp[i][j] = dp[i-1][j] + dp[i][j-1];
        }
    }

    // 输出结果
    cout << dp[m][n] << endl;
    return 0;
}


其中,dp[i][j]表示到达地图中第i行第j列格子的不同方法数。初始化边界条件为第一行和第一列的格子只能向右或者向下走,因此到达这些格子的方法数都为1。然后,根据递推公式dp[i][j] = dp[i-1][j] + dp[i][j-1],依次求解其他位置的方法数,最终得到dp[m][n]即为到达终点的不同方法数。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^