测试链接:https://leetcode.cn/problems/making-a-large-island/

思路:

先用洪水填充给每个岛屿进行编号,以便最后答案更新区分,设置一个used[]数组,用来避免更新答案时候算了重复的岛屿,为了避免全图都为陆地的特殊情况,我们在进行岛屿编号的时候,先更新答案为最大岛屿的面积,接着遍历每个海水的点,计算周围岛屿的面积之和,更新答案,记得加上该点本身的面积,所以初始化ans1=1

题解:

const int N=3e5;
class Solution {
public:
int ans=0;
int dir[4][2]={1,0,-1,0,0,1,0,-1};
int cursize[N];
bool used[N];
int n,m;
int id=1;
void dfs(int i,int j,vector<vector<int>>&grid)
{
grid[i][j]=id;
cursize[id]++;
for(int k=0;k<4;k++)
{
int x = i+dir[k][0];
int y = j+dir[k][1];
if(x<0||x>=n||y<0||y>=m||grid[x][y]!=1)continue;
dfs(x,y,grid);
} } int largestIsland(vector<vector<int>>& grid) {
n = grid.size();
m = grid[0].size();
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{ if(grid[i][j]==1)
{
id++;
dfs(i,j,grid);
}
ans = max(ans,cursize[id]);
}
} for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)cout<<grid[i][j];
cout<<endl;
} for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(grid[i][j]==0)
{
int ans1=1;
for(int k=0;k<4;k++)
{
int x = i+dir[k][0];
int y = j+dir[k][1];
if(x<0||x>=n||y<0||y>=m||grid[x][y]==0||used[grid[x][y]])continue;
used[grid[x][y]]=true;
ans1+=cursize[grid[x][y]];
}
for(int k=0;k<4;k++)
{
int x = i+dir[k][0];
int y = j+dir[k][1];
if(x<0||x>=n||y<0||y>=m||grid[x][y]==0)continue;
used[grid[x][y]]=false;
}
ans=max(ans,ans1);
}
}
}
return ans;
}
};

leedcode 827. 最大人工岛 (洪水填充)的更多相关文章

  1. opencv中的洪水填充算法

    在图像处理里,如果我们需要填充一个区域,使该区域为相同的颜色,则比较常用的是洪水填充法.洪水填充法可以用DFS也可以用BFS实现. opencv下有函数实现该功能: CVAPI(void) cvFlo ...

  2. Java实现 LeetCode 827 最大人工岛(DFS+暴力模拟)

    827. 最大人工岛 在二维地图上, 0代表海洋, 1代表陆地,我们最多只能将一格 0 海洋变成 1变成陆地. 进行填海之后,地图上最大的岛屿面积是多少?(上.下.左.右四个方向相连的 1 可形成岛屿 ...

  3. [LeetCode] Flood Fill 洪水填充

    An image is represented by a 2-D array of integers, each integer representing the pixel value of the ...

  4. LeetCode刷题 Flood Fill 洪水填充问题

    An  image is represented by a 2-D array of integers,each integers,each integer respresenting the sta ...

  5. 图像处理之泛洪填充算法(Flood Fill Algorithm)

    泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法又称洪水填充算法是在很多图形绘制软件中常用的填充算法,最熟悉不过就是 windows paint的油漆桶功能.算法的原理很简单,就 ...

  6. 图像处理------泛洪填充算法(Flood Fill Algorithm) 油漆桶功能

    泛洪填充算法(Flood Fill Algorithm) 泛洪填充算法又称洪水填充算法是在很多图形绘制软件中常用的填充算法,最熟悉不过就是 windows paint的油漆桶功能.算法的原理很简单,就 ...

  7. 八 ROI(region of interest)和泛洪填充

    一.ROI 感兴趣区(Region of Interest,ROIs) 是图像的一部分,它通过在图像上选择或使用诸如设定阈值(thresholding) 或者从其他文件(如矢量> 转换获得等方法 ...

  8. Swift LeetCode 目录 | Catalog

    请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift    说明:题目中含有$符号则为付费题目. 如 ...

  9. C#LeetCode刷题-深度优先搜索

    深度优先搜索篇 # 题名 刷题 通过率 难度 98 验证二叉搜索树   22.2% 中等 99 恢复二叉搜索树   45.1% 困难 100 相同的树   48.1% 简单 101 对称二叉树   4 ...

  10. 字符型图片验证码识别完整过程及Python实现

    字符型图片验证码识别完整过程及Python实现 1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...

随机推荐

  1. arcgis创建sqlserver企业级空间数据库过程中出现的问题及解决方案

    在arcgis中创建sqlserver版本的企业空间数据库过程中,出现了多种问题,现把问题的现象.原因和解决方案记录下来,以防遗忘(年纪大了). 1 用sa账号创建空间数据库提示创建失败15456 安 ...

  2. SSI注入

    .stm,.shtm和.shtml后缀文件中可以如此执行命令 <!--#exec cmd="ls"-->

  3. K8s进阶之LimitRange

    概述 官方文档:https://kubernetes.io/zh-cn/docs/concepts/policy/limit-range/ 在 Kubernetes(K8s)中,LimitRange ...

  4. C++学习思维导图

    C++思维导图 整个的思维导图大概的架构如下,Xmind.SVG.PDF格式的下载链接都在下面了,如有需要可自取 Xmind文件分享:https://cnblogs-img.oss-cn-hangzh ...

  5. PHP框架中用户认证和授权的实现方法与示例

    本文由 ChatMoney团队出品 在Web开发中,用户认证(Authentication)和授权(Authorization)是构建安全应用程序的核心组件.用户认证是验证用户身份的过程,确保用户是他 ...

  6. Solon AI + MCP实战:5行代码搞定天气查询,LLM从此告别数据孤岛

    此文参考自:https://www.toutiao.com/article/7505712149642117669/ 一.痛点直击:为什么你的AI模型会"一问三不知"? 当你问 L ...

  7. HyperMesh视觉控制

    在HyperMesh中,模型视角控制可通过标准视图(Standard Views)工具栏.三维视图控制(3D View Controls)工具栏以及鼠标实现. (1) 标准视图工具栏图标.   (2) ...

  8. SQL Server 中的检查账号是否被锁定-用户登陆失败的原因与解决方案

    在使用 SQL Server 数据库时,用户可能会遇到"用户登陆失败"的问题.这种问题不仅会影响数据库的使用,也可能导致应用程序的中断.因此,了解这一问题的原因及其解决方案至关重要 ...

  9. MCP 核心架构解析

    引言 Model Context Protocol (MCP) 是一种为连接大型语言模型(LLM)应用而设计的通信协议,它建立在灵活.可扩展的架构基础上,旨在实现LLM应用程序与各类集成之间的无缝交互 ...

  10. shell语言入门

    前言 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁,是linux内置的一款软件. 通过编写Shell的脚本,可以更好的使用linux系统(比如.安装卸载软件.增删改查文件 ...