给一个h×m的网格,一开始在左上角 (1,1) 每一步只能向右或向下走,不能经过 '#' 格子,求走到右下角(h,m)有多少种走法。 ,请用C++代码实现
时间: 2024-02-24 14:57:13 浏览: 40
LeetCode 热题 HOT 100 (2)1
好的,以下是 C++ 代码实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int countPaths(vector<vector<char>> &grid) {
int h = grid.size(), m = grid[0].size();
vector<vector<int>> dp(h+1, vector<int>(m+1));
dp[1][1] = 1;
for (int i = 1; i <= h; i++) {
for (int j = 1; j <= m; j++) {
if (grid[i-1][j-1] == '#') {
dp[i][j] = 0;
} else {
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
}
return dp[h][m];
}
int main() {
int h, m;
cin >> h >> m;
vector<vector<char>> grid(h, vector<char>(m));
for (int i = 0; i < h; i++) {
for (int j = 0; j < m; j++) {
cin >> grid[i][j];
}
}
cout << countPaths(grid) << endl;
return 0;
}
```
其中 `vector<vector<char>> grid` 表示 h×m 的网格,用 '#' 表示障碍格子,用其他字符表示可通行格子。然后通过 `countPaths` 函数计算从起点 (1,1) 走到右下角的不同路径数。
阅读全文