岛屿的数量

简介: 前言文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820…种一棵树最好的时间是十年前,其次是现在

絮叨


小六六第一眼看的时候,一脸懵逼,哈哈,这个是力扣每日一题推送的,主要是以前都不刷算法的,之后决定重新做人,慢慢刷题路。


题目


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

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

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

示例 1:

输入:
11110
11010
11000
00000
输出: 1
复制代码


示例 2:

输入:
11000
11000
00100
00011
输出: 3
复制代码


解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。

以上就是题目了,小六六跟大家一起来读读题,其实他的意思就是,每一个位置的前后左右能够用1连起来就是一个岛屿,所以小六六画了2个图帮大家理解题目的意思



题解


怎么题目可以使用深度优先和广度优先算法去做,不过小六六就牛逼了,连这2个概念都不清楚,大佬大佬。 如果不清楚这2个概念的你们也可以看下面的文章

虽然小六六不懂这些概念,但是还是跟着把题目做出来了,哈哈,重点是跟着答案。但是我发现明白了思想好像也不难,下面是题目的代码,小六六打算用广度优先撸一下

package com.code.search;
/**
 * @author 小六六
 * @version 1.0
 * @date 2020/4/20 21:10
 *
 */
public class SearchOne {
    //定义打印岛屿个数的方法
    public static int printNum(char[][] grid) {
        //校验一下这个数组
        if (null==grid||grid.length==0)return 0;
        int row=grid.length;
        int column=grid[0].length;
        //定义一个变量来统计岛屿的个数
        int num=0;
        //遍历这个2维数组
        for (int i=0;i<row;i++){
            for (int j=0;j<column;j++){
                //如果等于0就继续循环
                if (grid[i][j]=='0')continue;
                //不然就进行深度搜索
                num++;
                dfs(grid,i,j);
            }
        }
        return num;
    }
    private static void dfs(char[][] grid, int row, int column) {
        int nr = grid.length;
        int nc = grid[0].length;
        //首先确定搜索的范围,超过这个四个最大范围点的,或者是深度遍历的时候本身是0,就直接不搜索了,说明到达最大深度
        if (row<0||column<0||row>=nr||column>=nc||grid[row][column]=='0') return;
        //如果不是达到最大深度,那么我们就继续搜,但是要把本身搜的点记录,也就是题目的变成0
        grid[row][column]='0';
        //然后往上下左右4个点,进行深度搜索
        dfs(grid,row-1,column);
        dfs(grid,row+1,column);
        dfs(grid,row,column-1);
        dfs(grid,row,column+1);
    }
    public static void main(String[] args) {
        //测试类
        char[][] grid= {
                {'1', '1', '0'},
                {'0','1','1'},
                {'1','0','1'}
        };
        int i = printNum(grid);
        System.out.println(i);
    }
}
复制代码



结尾


答案是2个。 哈哈 ,解法很多,大家可以多去尝试,大家加油吧

相关文章
|
6月前
|
算法 测试技术 C++
【差分数组】【图论】【分类讨论】【整除以2】3017按距离统计房屋对数目
【差分数组】【图论】【分类讨论】【整除以2】3017按距离统计房屋对数目
|
6月前
|
算法 前端开发
“气球” 的最大数量
“气球” 的最大数量
60 0
|
6月前
|
算法 测试技术 C#
【图论】【分类讨论】LeetCode3017按距离统计房屋对数目
【图论】【分类讨论】LeetCode3017按距离统计房屋对数目
|
6月前
|
算法 测试技术 C#
【差分数组】【图论】【分类讨论】【整除以2】100213按距离统计房屋对数目
【差分数组】【图论】【分类讨论】【整除以2】100213按距离统计房屋对数目
【差分数组】【图论】【分类讨论】【整除以2】100213按距离统计房屋对数目
|
6月前
连通块中点的数量
连通块中点的数量
41 0
|
6月前
|
C++ 索引 Python
leetcode-200:岛屿数量
leetcode-200:岛屿数量
47 0
|
6月前
leetcode-1189:“气球” 的最大数量
leetcode-1189:“气球” 的最大数量
30 0
|
11月前
|
算法 测试技术 C++
C++前缀和算法的应用:最大化城市的最小供电站数目(一)
C++前缀和算法的应用:最大化城市的最小供电站数目
|
11月前
|
算法 测试技术 C#
C++前缀和算法的应用:最大化城市的最小供电站数目(二)
C++前缀和算法的应用:最大化城市的最小供电站数目
|
6月前
|
存储 算法 程序员
【算法训练-搜索算法 一】【DFS网格搜索框架】岛屿数量、岛屿的最大面积、岛屿的周长
【算法训练-搜索算法 一】【DFS网格搜索框架】岛屿数量、岛屿的最大面积、岛屿的周长
124 0