一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start”)。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 问总共有多少条不同的路径?使用C++
时间: 2024-10-08 20:23:37 浏览: 27
这是一个经典的动态规划问题,通常被称为“机器人走迷宫”。在C++中,你可以使用二维数组dp来解决这个问题,其中dp[i][j]表示到达位置(i, j)的不同路径数。以下是解决此问题的基本算法步骤:
1. 初始化:dp[0][0] = 1,因为从起点出发到起点只有一条路。
2. 动态转移:对于每个位置(i, j),如果i > 0,那么上一格dp[i - 1][j]可以到达这个位置,所以dp[i][j] += dp[i - 1][j];同理,如果j > 0,那么左边dp[i][j - 1]也可以到达,所以dp[i][j] += dp[i][j - 1]。
3. 返回结果:当到达右下角(即i == m - 1 && j == n - 1)时,dp[m - 1][n - 1]就是总的路径数。
下面是一个简单的C++函数实现:
```cpp
int uniquePaths(int m, int n) {
if (m <= 0 || n <= 0) return 0;
vector<vector<int>> dp(m, vector<int>(n, 0));
dp[0][0] = 1;
for (int i = 1; i < m; i++) {
dp[i][0] = dp[i - 1][0];
}
for (int j = 1; j < n; j++) {
dp[0][j] = dp[0][j - 1];
}
for (int i = 1; i < m; i++) {
for (int j = 1; j < n; j++) {
dp[i][j] = dp[i - 1];
}
```
阅读全文