uacs2024

导航

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;  // 返回岛屿总数
    }
};

 

posted on 2025-03-26 20:31  ᶜʸᵃⁿ  阅读(9)  评论(0)    收藏  举报