一个机器人只能向下和向右移动,每次只能移动一步,设计一个算法求它从(0,0)移动到(m,n)有多少条路径。用C语言解答
时间: 2024-10-20 19:11:18 浏览: 22
行业文档-设计装置-机器人移动平台的驱动和换向机构.zip
这个问题可以使用动态规划来解决,经典的思路是“宽度优先搜索”(广度优先搜索,BFS),也可以视为棋盘上从左上角到右下角的走法。我们可以创建一个二维数组dp[m+1][n+1],其中dp[i][j]表示到达坐标(i,j)的路径数。
C语言代码实现如下:
```c
#include <stdio.h>
int numPaths(int m, int n) {
if (m == 0 || n == 0) return 1; // 到达起点(0,0)的唯一路径是直接到达
dp[0][0] = 1;
// 初始化边界条件
for (int i = 1; i <= m; i++) {
dp[i][0] = 1; // 右移
dp[0][i] = 1; // 下移
}
// 动态填充dp数组
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 = 3, n = 3; // 想要知道路径的格子大小
printf("从(0,0)到(%d,%d)的路径数是 %d\n", m, n, numPaths(m, n));
return 0;
}
```
当你运行这个程序并提供具体的m和n值时,它会计算从原点到给定坐标(m, n)的所有路径总数。
阅读全文