【CSDN 每日一练 ★★☆】【DSF/BSF】岛屿数量

【CSDN 每日一练 ★★☆】【DSF/BSF】岛屿数量

深度遍历 宽度遍历

题目

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

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

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

示例

示例 1:

输入:grid = [

"1","1","1","1","0"\], \["1","1","0","1","0"\], \["1","1","0","0","0"\], \["0","0","0","0","0"

]

输出:1

示例 2:

输入:grid = [

"1","1","0","0","0"\], \["1","1","0","0","0"\], \["0","0","1","0","0"\], \["0","0","0","1","1"

]

输出:3

提示
  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 300
  • grid[i][j] 的值为 '0' 或 '1'
Java实现
java 复制代码
public int numIslands(char[][] grid) {
    int islandNum = 0;
    for (int i = 0; i < grid.length; i++) {
        for (int j = 0; j < grid[0].length; j++) {
            if (grid[i][j] == '1') {
                infect(grid, i, j); //将与grid[i][j]相连的`1`标记为`2`
                islandNum++;
            }
        }
    }
    return islandNum;
}
public void infect(char[][] grid, int i, int j) {
    // 如果发现已经被标记或者是水,结束深度遍历
    if (i < 0 || i >= grid.length ||
            j < 0 || j >= grid[0].length || grid[i][j] != '1') {
        return;
    }
    grid[i][j] = '2';
    // 宽度遍历四周
    infect(grid, i + 1, j);
    infect(grid, i - 1, j);
    infect(grid, i, j + 1);
    infect(grid, i, j - 1);
}
相关推荐
xiaoye37082 小时前
Java 自动装箱 / 拆箱 原理详解
java·开发语言
ZTLJQ3 小时前
数据的基石:Python中关系型数据库完全解析
开发语言·数据库·python
夏霞3 小时前
c# signlar 客户端传递参数给服务端配置方法
开发语言·c#
迷藏4943 小时前
**发散创新:基于 Rust的开源权限管理系统设计与实战**在现代软件架构中,**权限控制**早已不
java·开发语言·rust·开源
lvxiangyu114 小时前
MPPI 算法证明重构:基于无穷维泛函变分与 KL 散度的构造性推导
算法·重构·最优控制·随机最优控制
2301_818419014 小时前
C++中的解释器模式变体
开发语言·c++·算法
跟着珅聪学java4 小时前
js编写中文转unicode 教程
前端·javascript·数据库
ab1515174 小时前
3.25完成*23、*24、*28、*30、*33、*38、*39、*40
算法
英俊潇洒美少年4 小时前
Vue3 深入响应式系统
前端·javascript·vue.js
摇滚侠4 小时前
Java 项目《谷粒商城-1》架构师级Java 项目实战,对标阿里 P6-P7,全网最强,实操版本
java·开发语言