题意
一个二维数组, 包含0和1, 求其中1的数量
方法
DFS
代码
class Solution {
public:
// 四个方向的下标偏移量
int dx[4] = {0, -1, 1, 0};
int dy[4] = {-1, 0, 0, 1};
void dfs(vector<vector<char>>& grid, int m, int n, int i, int j) {
// 越界直接返回
if (i < 0 || i >= m || j < 0 || j >= n) {
return;
}
// 遇到水直接返回
if (grid[i][j] == '0') {
return;
}
// 接壤的是陆地,属于一个岛屿,直接记为'0'
grid[i][j] = '0';
// 递归搜索四个方向
for (int k = 0; k < 4; k++) {
dfs(grid, m, n, i + dx[k], j + dy[k]);
}
}
int numIslands(vector<vector<char>>& grid) {
int m = grid.size();
int n = grid[0].size();
int res = 0;
// 遍历所有网格
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
// 如果是陆地,岛屿加一,并将相连陆地记为'0'
if (grid[i][j] == '1') {
res++;
dfs(grid, m, n, i, j);
}
}
}
return res;
}
};