码迷,mamicode.com
首页 > 其他好文 > 详细

DFS_200. 岛屿数量

时间:2020-07-23 16:17:54      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:判断   turn   定义   leetcode   ber   二维   说明   problems   ++   

给你一个由 ‘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. 岛屿数量

标签:判断   turn   定义   leetcode   ber   二维   说明   problems   ++   

原文地址:https://www.cnblogs.com/zzxisgod/p/13365579.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!