用DFS遍历网格,标记已访问的陆地,统计独立岛屿的数量:遇到未访问的陆地时,计数加 1,并通过 DFS 将其连通的所有陆地标记为水,避免重复统计。
class Solution {
public:
void dfs(vector<vector<char>>& grid, int r, int c) {
int f = grid.size();
int m = grid[0].size();
grid[r][c] = '0'; // 标记当前陆地为已访问
// 向上
if (r - 1 >= 0 && grid[r-1][c] == '1') dfs(grid, r - 1, c);
// 向下
if (r + 1 < f && grid[r+1][c] == '1') dfs(grid, r + 1, c);
// 向左
if (c - 1 >= 0 && grid[r][c-1] == '1') dfs(grid, r, c - 1);
// 向右
if (c + 1 < m && grid[r][c+1] == '1') dfs(grid, r, c + 1);
}
int numIslands(vector<vector<char>>& grid) {
int f = grid.size();
if (!f) return 0; // 网格为空,直接返回0
int m = grid[0].size();
int lands = 0;
// 遍历网格的每个单元格
for (int r = 0; r < f; ++r) {
for (int c = 0; c < m; ++c) {
if (grid[r][c] == '1') { // 发现未访问的陆地
++lands;
dfs(grid, r, c); // 标记其连通陆地
}
}
}
return lands;
}
};

京公网安备 11010502036488号