路径问题
有一个机器人位于一个m行n列的网格的左上角,机器人每次只能向下或向右移动一步,问有多少种方法可以走到右下角。
互动实验
网格路径:把上方与左方的走法合并
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
无论机器人用何种方式到达右下角,总有最后挪动的一步。右下角的坐标为,那么前一步机器人一定在或的位置。
如果机器人有X种方式从左上角走到,有Y种方式从左上角走到,那么机器人一共有X + Y种方式从左上角走到。原问题就转换为了机器人有多少种方式从左上角走到和。
那么可以得出转移方程f[i][j] = f[i-1][j] + f[i][j-1],其中f[i][j]表示机器人有多少种方式走到。
初始条件为f[0][0] = 1,因为机器人只有1种方式到达左上角。
边界情况为当i = 0或j = 0,则前一步只能有一个方向到达,因此f[i][j] = 1。
知识测验
题目
只能向右或向下,内部格子的路径数取自哪里?
路径问题
C
#include <stdio.h>
int path(int row, int col) {
int path[row][col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (i == 0 || j == 0) {
path[i][j] = 1;
} else {
path[i][j] = path[i - 1][j] + path[i][j - 1];
}
}
}
return path[row - 1][col - 1];
}
int main(void) {
printf("%d\n", path(4, 8));
return 0;
}网格行数和列数均为正整数,示例范围内路径数量不溢出。
知识测验
题目
3行4列无障碍网格,从左上到右下共有几种路径?
动手练习
填写三行四列路径网格
| 行 / 列 | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 0 | — | — | — | — |
| 1 | — | — | — | — |
| 2 | — | — | — | — |
机器人从(0,0)到(2,3),只能向右或向下。先填边界,再逐格计算内部状态,标出每格的两个来源,求总路径数。