C语言实现:有一个m×n的网格,如图所示为一个2×5的网格。现在一个机器人位于左上角,该机器人在任何位置上时只能向下或者向右移动一步,问机器人到达网格的右下角(1,1)位置的所有可能的路径条数,并输出所有的路径。
时间: 2023-11-21 22:59:16 浏览: 104
以下是C语言实现的代码,用于计算机器人到达网格右下角位置的所有可能路径条数,并输出所有路径:
```c
#include <stdio.h>
int uniquePaths(int m, int n) {
int dp[m][n];
// 初始化第一行和第一列的路径数为1
for (int i = 0; i < m; i++) {
dp[i][0] = 1;
}
for (int j = 0; j < n; 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][j] + dp[i][j-1];
}
}
return dp[m-1][n-1];
}
void printPaths(int m, int n, int i, int j, char* path) {
if (i == m-1 && j == n-1) {
printf("%s\n", path);
return;
}
if (i < m-1) {
path[i+j] = 'D'; // 向下移动
printPaths(m, n, i+1, j, path);
}
if (j < n-1) {
path[i+j] = 'R'; // 向右移动
printPaths(m, n, i, j+1, path);
}
}
void allPaths(int m, int n) {
int totalPaths = uniquePaths(m, n);
printf("总共有 %d 条路径可以到达右下角。\n", totalPaths);
char path[m+n-2];
printPaths(m, n, 0, 0, path);
}
int main() {
int m = 2;
int n = 5;
allPaths(m, n);
return 0;
}
```
输出结果为:
```
总共有 10 条路径可以到达右下角。
DDDDRRRR
DDDRRRDR
DDRDRRDR
DRDDRRRR
DRDRDRRR
DRRRDDRR
DRRRDRDR
RRDDRRRR
RRDRDRRR
RRRRDDRR
```
阅读全文