DFS_200. 岛屿数量

Posted zzxisgod

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DFS_200. 岛屿数量相关的知识,希望对你有一定的参考价值。

给你一个由 ‘1‘(陆地)和 ‘0‘(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。

此外,你可以假设该网格的四条边均被水包围。

 

示例 1:

输入:
[
[‘1‘,‘1‘,‘1‘,‘1‘,‘0‘],
[‘1‘,‘1‘,‘0‘,‘1‘,‘0‘],
[‘1‘,‘1‘,‘0‘,‘0‘,‘0‘],
[‘0‘,‘0‘,‘0‘,‘0‘,‘0‘]
]
输出: 1

示例 2:

输入:
[
[‘1‘,‘1‘,‘0‘,‘0‘,‘0‘],
[‘1‘,‘1‘,‘0‘,‘0‘,‘0‘],
[‘0‘,‘0‘,‘1‘,‘0‘,‘0‘],
[‘0‘,‘0‘,‘0‘,‘1‘,‘1‘]
]
输出: 3
解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-islands


思路:

这简直就和上一题695的连通问题一模一样嘛

DFS,695理解透彻了,这个就是简简单单。

就是一毛一样的题,只是换了个输出,上个最大多少,这个有多少块是连通的,换汤不换药。

class Solution {
    //有了上个题的经验,这里我上来就直接定义一个方向
    final int[][] DIRS = new int[][]{{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
    public int numIslands(char[][] grid) {
        //一进来呢还是一样,先判断一下特殊情况
        if (grid == null || grid.length == 0 || grid[0].length == 0) {
            return 0;
        }
        //记录数组的行和列和是否已经判断过
        final int row = grid.length;
        final int col = grid[0].length;
        boolean [][] isVisited = new boolean[row][col];
        int res = 0;
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (grid[i][j] == ‘1‘ && !isVisited[i][j]){
                    res += dfs(grid,i,j,isVisited);
                }
            }
        }
        return res;
    }
    
    public int dfs(char [][] gird,int i ,int j,boolean[][] isVisited){
        //进来了就说明这个点访问过了
        isVisited[i][j] = true;
        int count = 1;
        for (int [] DIR : DIRS){
            int newRow = i + DIR[0];
            int newCol = j + DIR[1];
            if (checkBoundary(gird,newRow,newCol) && gird[newRow][newCol] == ‘1‘ && !isVisited[newRow][newCol]){
                dfs(gird,newRow,newCol,isVisited);
            }
        }
        return count;
    }
    
    //判断是否越界的方法
    public boolean checkBoundary(char [][] gird, int i ,int j){
        final int row = gird.length;
        final int col = gird[0].length;
        return i >= 0 && i < row && j >= 0 && j < col;
    }
}

 

以上是关于DFS_200. 岛屿数量的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode No.200 岛屿数量(DFS)

leetcode 200. 岛屿数量(dfs||bfs)

LeetCode 200 岛屿数量[DFS] HERODING的LeetCode之路

Leetcode 200.岛屿的数量 - DFSBFS

DFS 算法秒杀岛屿系列题目

LeetCode树系列——200题岛屿数量