一个机器人只能向下和向右移动,每次只能移动一步,设计一个算法求它从(0,0)移动到(m,n)有多少条路径。例如m=5,n=3,则共有56条路径。用C语言解答
时间: 2024-10-20 19:11:19 浏览: 25
这是一个经典的动态规划问题,可以使用斐波那契数列的思路来解决。我们可以创建一个二维数组dp[m+1][n+1],其中dp[i][j]表示到达点(i,j)的不同路径数。初始时,起点(0,0)有1条路径(直接到达),其余位置dp[i][j]等于左上方位置dp[i-1][j-1]加上上面的位置dp[i][j-1]。
下面是简单的C语言代码实现:
```c
#include <stdio.h>
int numPaths(int m, int n) {
int dp[m + 1][n + 1];
// 初始化边界条件
for (int i = 0; i <= m; i++) {
dp[i][0] = 1; // 只能向右走,所以到达(0,j)只有一条路
dp[0][i] = 1; // 只能向下走,所以到达(i,0)也只有一条路
}
// 动态规划计算中间位置的路径数
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; // 继续向右或向下走
}
}
return dp[m][n];
}
// 测试函数
int main() {
int m = 5;
int n = 3;
printf("从(%d,%d)移动到(%d,%d)的路径总数为:%d\n", 0, 0, m, n, numPaths(m, n));
return 0;
}
```
运行这个程序,当m=5, n=3时,会得到56作为结果。
阅读全文