Loading

200. [数组][DFS]岛屿数量

200. 岛屿数量

岛屿问题是一类经典的网格搜索类问题。类似的岛屿题目还有:

方法一:DFS深度优先搜索

  • 我们可以将二维网格看成一个无向图,竖直或水平相邻的 \(1\) 之间有边相连。
  • 为了求出岛屿的数量,我们可以扫描整个二维网格。如果一个位置为 \(1\),则以其为起始节点开始进行深度优先搜索。在深度优先搜索的过程中,每个搜索到的 \(1\) 都会被重新标记为 \(0\)
  • 最终岛屿的数量就是我们进行深度优先搜索的次数。
// 执行耗时:2 ms,击败了96.38% 的Java用户
// 内存消耗:41 MB,击败了88.17% 的Java用户

class Solution {
    public int numIslands(char[][] grid) {
        int ans = 0;
        for (int r = 0; r < grid.length; r++){
            for (int c = 0; c < grid[0].length; c++){
                if(grid[r][c] == '1'){
                    ans++;
                    dfs(grid, r, c);
                }
            }
        }
        return ans;
    }
    public void dfs(char[][] grid, int r, int c){
        if (r < 0 || c < 0 || r >= grid.length || c >= grid[0].length || grid[r][c] == '0') {
            return;
        }
        grid[r][c] = '0';
        dfs(grid, r - 1, c);
        dfs(grid, r + 1, c);
        dfs(grid, r, c - 1);
        dfs(grid, r, c + 1);
    }
}
posted @ 2020-10-30 22:20  上海井盖王  阅读(78)  评论(0)    收藏  举报