leetcode200. 岛屿数量
200. 岛屿数量
写了一半,最后还是看题解
class Solution {
public:
/**
* 深度优先搜索函数,用于标记当前岛屿的所有相连部分
* @param grid 二维字符数组,表示地图
* @param i 当前行索引
* @param j 当前列索引
*/
void dfs(vector<vector<char>>& grid, int i, int j) {
// 边界检查:如果超出网格范围,直接返回
if(i == -1 || i == grid.size() || j == -1 || j == grid[0].size())
return;
// 如果当前单元格是水('0')或已访问过的陆地('2'),直接返回
if(grid[i][j] == '0' || grid[i][j] == '2')
return;
// 标记当前单元格为已访问(用'2'表示)
grid[i][j] = '2';
// 递归访问四个相邻方向:上、下、左、右
dfs(grid, i-1, j); // 上
dfs(grid, i+1, j); // 下
dfs(grid, i, j-1); // 左
dfs(grid, i, j+1); // 右
}
/**
* 计算网格中岛屿的数量
* @param grid 二维字符数组,表示地图
* @return 岛屿的数量
*/
int numIslands(vector<vector<char>>& grid) {
int res = 0; // 初始化岛屿计数器
// 遍历整个网格
for(int i = 0; i < grid.size(); ++i) {
for(int j = 0; j < grid[0].size(); ++j) {
// 当发现未访问的陆地('1')时
if(grid[i][j] == '1') {
++res; // 增加岛屿计数
dfs(grid, i, j); // 执行DFS标记整个相连的岛屿
}
}
}
return res; // 返回岛屿总数
}
};