🧩Algo 图论

200. 岛屿数量

难度:🟡 Medium | 标签:图论、DFS、BFS、并查集 | 状态:⬜ LeetCode 链接

思路

扫描每个格子,遇到 ‘1’ 就 DFS 染色(改成 ‘0’),整片陆地变零后岛数 +1。

代码

class Solution {
    int R, C;
    void dfs(vector<vector<char>>& g, int i, int j) {
        if (i < 0 || j < 0 || i >= R || j >= C || g[i][j] != '1') return;
        g[i][j] = '0';
        dfs(g, i + 1, j); dfs(g, i - 1, j);
        dfs(g, i, j + 1); dfs(g, i, j - 1);
    }
public:
    int numIslands(vector<vector<char>>& grid) {
        R = grid.size(); C = grid[0].size();
        int cnt = 0;
        for (int i = 0; i < R; ++i)
            for (int j = 0; j < C; ++j)
                if (grid[i][j] == '1') { ++cnt; dfs(grid, i, j); }
        return cnt;
    }
};

复杂度

  • 时间 O(R · C),空间 O(R · C)(递归栈最坏)

易错 / 回顾

  • DFS 不要漏判 g[i][j] != '1'(包括边界外、已染色、海洋)
  • 染色后不要复原(与回溯类题不同)
  • 大网格用 BFS 防爆栈
Related · 图论