图论day57|建造最大岛屿(卡码网)【截至目前,图论的最高难度】

图论day57|建造最大岛屿(卡码网)【截至目前所做的题中,图论的最高难度】

      • 思维导图分析
    • 104.建造最大岛屿(卡码网)【截至目前所做的题中,图论的最高难度】

思维导图分析

在这里插入图片描述

104.建造最大岛屿(卡码网)【截至目前所做的题中,图论的最高难度】

题目描述

给定一个由 1(陆地)和 0(水)组成的矩阵,你最多可以将矩阵中的一格水变为一块陆地,在执行了此操作之后,矩阵中最大的岛屿面积是多少。

岛屿面积的计算方式为组成岛屿的陆地的总数。岛屿是被水包围,并且通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设矩阵外均被水包围。

输入描述

第一行包含两个整数 N, M,表示矩阵的行数和列数。之后 N 行,每行包含 M 个数字,数字为 1 或者 0,表示岛屿的单元格。

输出描述

输出一个整数,表示最大的岛屿面积。

输入示例

4 5
1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1

输出示例

6

提示信息

img

对于上面的案例,有两个位置可将 0 变成 1,使得岛屿的面积最大,即 6。

img

数据范围:

1 <= M, N <= 50。

#include <iostream>
#include <vector>
#include <unordered_map>
#include <unordered_set>
using namespace std;int dir[4][2]={1,0,-1,0,0,1,0,-1};
int count;void dfs(vector<vector<int>> &grid,vector<vector<bool>>& visited,int x,int y,int mark)
{if(visited[x][y]==true||grid[x][y]==0)return;visited[x][y]=true;grid[x][y]=mark;count++;for(int i=0;i<4;i++){int nextx=x+dir[i][0];int nexty=y+dir[i][1];if(nextx<=0||nextx>=grid.size()||nexty<=0||nexty>=grid[1].size())continue;dfs(grid,visited,nextx,nexty,mark);}
}int main()
{int n,m;cin>>n>>m;vector<vector<int>> grid(n+1,vector<int>(m+1,0));for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>grid[i][j];vector<vector<bool>> visited(n+1,vector<bool>(m+1,false));unordered_map<int,int> map;bool landAll=true;int mark=2;//给岛屿标记并用哈希表存储for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(grid[i][j]==0)landAll=false;if(grid[i][j]==1&&visited[i][j]==false){count=0;bfs(grid,visited,i,j,mark);map[mark]=count;mark++;}}if(landAll){cout<<n*m<<endl;return 0;}unordered_set<int> set;int result=0;//将一块水变成陆地for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(grid[i][j]==0){set.clear();count=1;for(int k=0;k<4;k++){int neari=i+dir[k][0];int nearj=j+dir[k][1];if(neari<=0||neari>=grid.size()||nearj<=0||nearj>=grid[1].size())continue;if(set.find(grid[neari][nearj])!=set.end())continue;count+=map[grid[neari][nearj]];set.insert(grid[neari][nearj]);}result=max(result,count);}}cout<<result<<endl;
}

具体分析过程见思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/55865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

带你解锁Open_FLUX.1模型的神奇世界!

大家好我是极客菌&#xff01;&#xff01;&#xff01; Open_FLUX.1模型&#xff0c;作为ComfyUI的最新力作&#xff0c;已经在AI绘画领域引起了广泛的关注。这款模型以其独特的艺术风格和强大的创作能力&#xff0c;为艺术家们提供了一个全新的创作平台。今天&#xff0c;就…

OJ在线评测系统 微服务高级 Gateway网关接口路由和聚合文档 引入knife4j库集中查看管理并且调试网关项目

Gateway微服务网关接口路由 各个服务之间已经能相互调用了 为什么需要网关 因为我们的不同服务是放在不同的端口上面的 如果前端调用服务 需要不同的端口 8101 8102 8103 8104 我们最好提供一个唯一的 给前端去调用的路径 我们学习技术的时候必须要去思考 1.为什么要用&am…

百度文心智能体平台开发萌猫科研加油喵

百度文心智能体平台开发萌猫科研加油喵 在科研的道路上&#xff0c;研究生们常常面临着巨大的压力和挑战。为了给这个充满挑战的群体带来一些鼓励和温暖&#xff0c;我借助百度文心智能体平台开发了一个独特的智能体 《萌猫科研加油喵》。 一、百度文心智能体平台介绍 百度文…

k8s 的网络通信

目录 1 k8s通信整体架构 2 flannel 网络插件 2.1 flannel 插件组成 2.2 flannel 插件的通信过程 2.3 flannel 支持的后端模式 3 calico 网络插件 3.1 calico 简介 3.2 calico 网络架构 3.3 部署 calico 1 k8s通信整体架构 k8s通过CNI接口接入其他插件来实现网络通讯。目前比较…

DOM对象

DOM概述 官方定义&#xff1a; DOM是W3C制定的一个规范(标准)&#xff0c;(Document Object Model&#xff0c;文档对象模型)&#xff0c;是提供了访问和操作网页中各元素的方法&#xff0c;让程序可以动态的修改或改变网页元素的内容、样式、结构。 DOM是W3C制定的一个规范…

回南天,即使没有除湿机,也能除湿

前几天收到网友私信&#xff0c;询问烘干机干衣吹热风&#xff0c;这个比较好理解&#xff0c;热气吹到衣服上加速水分蒸发。但空调除湿为什么不吹热风了&#xff0c;而吹冷风呢&#xff1f;以及除湿机的原理等的问题。 因为我在南京总是觉得干&#xff0c;加湿器24小时不停&a…

The 2024 ICPC Kunming Invitational Contest K. Permutation(交互 期望)

在知乎内查看 题目 思路来源 题解 首先特判n1的情况&#xff0c;其实也不用问 分治&#xff0c;假设当前解决到[l,r]&#xff0c;要递归的vector是x&#xff0c; 维护两个vector L、R&#xff0c;代表下一步要在[l,mid]和[mid1,r]分治的vector 每次将x random_shuffle后&a…

易基因:J Hazard Mater/IF12.2:RRBS揭示农药诱导胰腺全基因组DNA甲基化跨代改变与代谢表型相关

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 人造化学品的不当使用会对生物多样性和人类健康构成重大威胁&#xff0c;某些化学物质&#xff08;如农药&#xff09;可能通过表观遗传机制&#xff08;如DNA甲基化&#xff09;对代谢健…

如何批量找到企业联系电话

在拓展业务的过程中&#xff0c;找到企业的联系电话是必不可少的一步。然而&#xff0c;手动查找不仅耗时费力&#xff0c;效率也低下。对于需要批量获取客户信息的销售人员或企业来说&#xff0c;寻找一种快速、精准的方式批量获取企业联系电话显得尤为重要。本文将为你介绍几…

MPLS LDP协议

文章目录 LDP标签分发协议工作原理LDP应用倒数第二跳弹出 LDP标签分发协议 基于FEC自动分配标签构建LSP用于建立动态LSPLDP报文头部结构信息类型 工作原理 LDP工作过程 发送Hello消息用于发现邻居&#xff1b;UDP发送LSR_1主动发起并建立TCP连接&#xff1b;TCP进行建立主动方发…

怎么利用商品详情API接口实现数据获取与应用?

在当今数字化的商业时代&#xff0c;高效获取和利用商品数据对于企业和开发者来说至关重要。商品详情 API 接口为我们提供了一种便捷的方式来获取丰富的商品信息&#xff0c;从而实现各种有价值的应用。本文将深入探讨如何利用商品详情 API 接口实现数据获取与应用。 一、商品…

STM32 HAL库UART查询方式实例

本文中介绍USART编程涵盖了三种主要方法&#xff0c;详细介绍STM32F407微控制器结合HAL库&#xff0c;通过UART的查询方式来实现一个实用的密码验证程序。提示用户键入一个字符作为密码。只有当用户精准地输入字符6时&#xff0c;系统才会反馈“密码正确”的确认信息。反之&…

【重学 MySQL】五十六、位类型

【重学 MySQL】五十六、位类型 定义赋值与使用注意事项应用场景 在MySQL数据库中&#xff0c;位类型&#xff08;BIT类型&#xff09;是一种用于存储位字段值的数据类型。 定义 BIT(n)表示n个位字段值&#xff0c;其中n是一个范围从1到64的整数。这意味着你可以存储从1位到64…

requestidlecallback与分时函数

前言 我们知道GUI 渲染线程与 JS 引擎线程是互斥的。当JS程序执行时间过长&#xff0c;会阻塞页面渲染和事件响应。那么针对一些优先级较低的任务&#xff0c;我们可以利用分时函数在主线程空闲时执行&#xff0c;减少卡顿。其本质是将一个长任务拆分成数个短任务&#xff0c;…

国产工具链GCKontrol-GCAir助力控制律开发快速验证

前言 随着航空领域技术的不断发展&#xff0c;飞机的飞行品质评估和优化成为了航空领域的一个重要任务&#xff0c;为了确保飞行器在各种复杂条件下的稳定性&#xff0c;控制律设计过程中的模型和数据验证需要大量仿真和测试。 本文将探讨基于世冠科技的国产软件工具链GCKont…

Leetcode 37. 解数独

1.题目基本信息 1.1.题目描述 编写一个程序&#xff0c;通过填充空格来解决数独问题。 数独的解法需 遵循如下规则&#xff1a; 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 33 宫内只能出现一次。&#xff08;请参考…

如何设置 GitLab 密码长度?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 60天专业…

cudnn8编译caffe过程(保姆级图文全过程,涵盖各种报错及解决办法)

众所周知,caffe是个较老的框架,而且只支持到cudnn7,但是笔者在复现ds-slam过程中又必须编译caffe,我的cuda版本是11.4,最低只支持到8.2.4,故没办法,只能编译了 在此记录过程、报错及解决办法如下; 首先安装依赖: sudo apt-get install git sudo apt-get install lib…

facebook受众选择设置策略的最佳方式

在进行Facebookguanggao投放时&#xff0c;受众的选择是一个至关重要的步骤。正确的受众选择不仅能够帮助我们更好地定位目标用户&#xff0c;还能显著提高guanggao的转化率和投资回报率&#xff08;ROI&#xff09;。然而&#xff0c;受众选择的数量和范围同样是需要认真考虑的…

【Tor】使用Debian系统搭建obfs4 Bridge网桥

你好 我是无聊的木子。 目录 前言 写作の原因 网桥是个啥? 正文 - 到底咋搭建捏 搞台机子先 比较简便の方法 - 买台云服务器 首月五折 一元试用 远程连接服务器 更加复杂の办法 - 自己拿物理机做网桥 开始搭建网桥 先安装Tor 然后配置网桥 最后组合网桥 找到fin…