【DFS】1254. 统计封闭岛屿的数目

news/2024/7/20 21:28:00 标签: 深度优先, 算法

1254. 统计封闭岛屿的数目

解题思路

  • 封闭岛屿就是上下左右全部被1包围的0 也就是靠边的0不算做封闭岛屿
  • 首先将上下左右的边界上的岛屿全部变成海洋
  • 然后在对剩下的岛屿进行DFS遍历
class Solution {
    public int closedIsland(int[][] grid) {
        // 封闭岛屿就是上下左右全部被1包围的0  也就是靠边的0不算做封闭岛屿


        // 计算封闭岛屿的数量

        int m = grid.length;
        int n = grid[0].length;

        for(int i = 0; i < n; i++){
            // 将上下的岛屿 全部变成海洋

            // 第0行的所有列
            dfs(grid,0,i);

            // 最后一行的所有列
            dfs(grid,m - 1,i);
        }

        // 将左右变成海洋
        for(int j = 0; j < m; j++){
            dfs(grid,j,0);
            dfs(grid,j,n - 1);
        }

        // 遍历剩下的岛屿

        int res = 0;
        for(int i = 0; i < m; i++){
            for(int j = 0; j < n; j++){
                if(grid[i][j] == 0){
                    res++;
                    dfs(grid,i,j);
                }
            }
        }


        return res;

    }

    // DFS遍历

    void dfs(int[][] grid,int i,int j){
        int m = grid.length;
        int n = grid[0].length;

        if(i < 0 || j < 0 || i >= m || j >= n){
            return;
        }

        if(grid[i][j] == 1){
            return;// 如果已经遍历到海水
        }

        // 遍历到岛屿 变成1
        if(grid[i][j] == 0){
            grid[i][j] = 1;
        }

        dfs(grid,i + 1,j);
        dfs(grid,i,j + 1);
        dfs(grid,i - 1,j);
        dfs(grid,i,j - 1);
    }
}


http://www.niftyadmin.cn/n/5001092.html

相关文章

远程访问公司局域网怎么设置

远程访问公司 LAN&#xff08;局域网&#xff09;计算机需要设置安全的远程访问方法&#xff0c;以确保数据的机密性和完整性。远程访问公司局域网计算机的步骤如下&#xff1a; 1、获得许可 确保您拥有远程访问公司 LAN 资源所需的权限和授权。这可能需要 IT 或网络管理员的…

电商平台-业务中台-SPU,SKU,SN概念简介

什么是SPU &#xff08;Standard Product Unit)? SPU标准属性是商品基本属性&#xff0c;基本属性中最核心两个属性是品牌和型号&#xff0c;电商平台一般采用 品牌和型号 来确定SPU&#xff08;Standard Product Unit&#xff09;标准化管理单元&#xff0c; 例如:小米 10 就…

MyBatis-Plus深入 —— 条件构造器与插件管理

前言 在前面的文章中&#xff0c;荔枝梳理了一个MyBatis-Plus的基本使用、配置和通用Service接口&#xff0c;我们发现在MyBatis-Plus的辅助增强下我们不再需要通过配置xml文件中的sql语句来实现基本的sql操作了&#xff0c;不愧是最佳搭档&#xff01;在这篇文章中&#xff0c…

说说线程栈

线程栈是指某时刻时内存中线程调度的栈信息,当前调用的方法总是位于栈顶。线程栈的内容是随着程序的运行动态变化的,因此研究线程栈必须选择一个运行的时刻(实际上指代码运行到什么地方)。 每个 Java 线程都有自己的线程栈,它是线程私有的,不会被其他线程访问。线程栈在方…

【Sentinel】核心API-Entry与Context

文章目录 一、Entry1、Entry的声明2、使用API自定义资源3、基于SentinelResource注解标记资源 二、Context1、Context介绍2、Context的初始化3、AbstractSentinelInterceptor4、ContextUtil 一、Entry 1、Entry的声明 默认情况下&#xff0c;Sentinel会将controller中的方法作…

【面试题精讲】什么是websocket?如何与前端通信?

有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 系列文章地址 什么是WebSocket&#xff1f; WebSocket是一种在Web应用程序中实现双向通信的协议。它允许在客户端和服务器之间建立持久…

面试:谈一下你对Nginx的理解

Nginx是什么&#xff1a;Nginx是一个高性能、开源的Web服务器和反向代理服务器&#xff0c;以其卓越的性能和可扩展性而闻名。它通常用于将客户端请求转发到后端服务器、提供静态文件服务和负载均衡。 高性能和高并发&#xff1a;Nginx的异步事件驱动架构使其能够有效地处理大…

ctfhub ssrf(3关)

文章目录 内网访问伪协议读取文件扫描端口 内网访问 根据该题目&#xff0c;是让我们访问127.0.0.1/falg.php&#xff0c;访问给出的链接后用bp抓包&#xff0c;修改URL&#xff0c;发送后得到flag&#xff1a; 伪协议读取文件 这题的让我们用伪协议&#xff0c;而网站的目录…