day66—BFS—最短的桥(LeetCode-934)

题目描述

给你一个大小为 n x n 的二元矩阵 grid ,其中 1 表示陆地,0 表示水域。

 是由四面相连的 1 形成的一个最大组,即不会与非组内的任何其他 1 相连。grid 中 恰好存在两座岛 。

你可以将任意数量的 0 变为 1 ,以使两座岛连接起来,变成 一座岛 。

返回必须翻转的 0 的最小数目。

输入格式

一个二维整数数组,输出是一个非负整数,表示需要填海造陆的位置数。
Input:
[[1,1,1,1,1],
[1,0,0,0,1],
[1,0,1,0,1],
[1,0,0,0,1],
[1,1,1,1,1]]

输出格式

一个整数代表答案。

示例 1:

输入:grid = [[0,1],[1,0]]
输出:1

示例 2:

输入:grid = [[0,1,0],[0,0,0],[0,0,1]]
输出:2

示例 3:

输入:grid = [[1,1,1,1,1],[1,0,0,0,1],[1,0,1,0,1],[1,0,0,0,1],[1,1,1,1,1]]
输出:1

提示:

  • n == grid.length == grid[i].length
  • 2 <= n <= 100
  • grid[i][j] 为 0 或 1
  • grid 中恰有两个岛

解决方案:

1、递归广度搜索部分:

终止条件:识别 0 则加入到队列中

单层递归:从该点的四个方向开始,一圈一圈的散射式搜索展开

2、主函数判断部分:

递归加入条件:遍历到 1 即加入循环判断周围有无 0

设置可变条件:bool filpped:是否可翻转

3、答案计数部分:

对于每层的循环加入的 0 位置点,周围是否存在 1 位置点可达并记录。

函数源码:

class Solution {
public:void bfs(queue<pair<int,int>>& points,vector<vector<int>>&grid,int row,int col,int i,int j){//越界条件判断if( i<0 || j<0 || i==row || j==col || grid[i][j]==2 )   return;//找到并记录 0 点位置if(grid[i][j]==0){points.push({i,j});return;}//降重,防止重复遍历grid[i][j]=2;//从该点的四个方向开始,一圈一圈的散射式搜索展开bfs(points,grid,row,col,i-1,j);bfs(points,grid,row,col,i+1,j);bfs(points,grid,row,col,i,j-1);bfs(points,grid,row,col,i,j+1);}//-------------------------------------------------------vector<int> direction{-1,0,1,0,-1};int shortestBridge(vector<vector<int>>& grid) {int row=grid.size();int col=grid[0].size();queue<pair<int,int>> points;bool flipped = false;   //flipped: 翻转for(int i=0;i<row;i++){if(flipped) break;for(int j=0;j<col;j++){if(grid[i][j]==1){bfs(points,grid,row,col,i,j);flipped=true;break;}}}
//-------------------------------------------------------int x,y;int level=0;while(!points.empty()){level++;int n_points=points.size();while(n_points--){auto[r,c]=points.front();points.pop();for(int k=0;k<4;k++){x=r+direction[k];y=c+direction[k+1];if(x>=0 && y>=0 && x<row && y<col){if(grid[x][y]==2)   continue;if(grid[x][y]==1)   return level;points.push({x,y});grid[x][y]=2;}}}}return 0;}
};

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

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

相关文章

FramePack 安装指南(中文)

FramePack 安装指南&#xff08;中文&#xff09; -Windows FramePack 是最前沿的 AI 视频生成框架&#xff0c;以极小的硬件需求颠覆视频创作&#xff01;它能在仅 6GB 笔记本 GPU 内存上&#xff0c;驱动 13B 模型以 30 FPS 生成超长 120 秒视频&#xff0c;几乎无内容限制&…

Redis Sentinel 非集群模式高可用部署指南

1. Sentinel 在非集群模式的定位 一句话&#xff1a;在单主多从架构中&#xff0c;用 Sentinel 替你盯哨——探测故障、选举新主、通知客户端。 核心四职能&#xff1a; 职能作用点Monitoring定时 PING 主从&#xff0c;自身也互相探测Notification通过日志/PubSub/外部调用报…

2025Java面试八股文

文章目录 Java基础JVM多线程SpringSpring Boot数据库与SQL分布式系统其他 Java基础 自动装箱与拆箱&#xff1a;Java中基础数据类型与包装类之间的转换。例如&#xff0c;Integer x 1; 是装箱&#xff0c;int y x; 是拆箱。Object类常用方法&#xff1a;如clone()、getClass…

宝塔安装nginx-rtmp,音视频直播

前置&#xff1a;需要自己开发音视频直播&#xff0c; 注意不是实时音视频&#xff0c;不是一对一视频聊天&#xff0c;不是视频会议 方案有 srs &#xff0c;nginx-rtmp&#xff0c;live555&#xff0c;node-media-server&#xff0c;EasyDarwin等 今天是说 nginx-rtmp 怎么…

基于微信小程序和深度学习的宠物照片拍摄指导平台的设计与实现

文章目录 摘要前言绪论1. 课题背景2. 国内外现状与趋势2.1 国内研究现状2.2 国外研究现状2.3 发展趋势3. 课题内容相关技术与方法介绍1. 微信小程序开发技术2. 深度学习模型选型2.1 MobileNetV22.2 ResNet-503. 系统架构设计4. 关键技术实现4.1 实时拍摄指导4.2 多模态建议生成…

web布局02

Web 发展的每个不同时期都有新的技术为 Web 布局提供支持&#xff0c;但不管是哪个时期&#xff0c;Web 布局相关的概念和术语都是相同的。如果你想彻底或者更好地掌握 Web 布局&#xff0c;那么首先需要对 Web 布局相关的技术术语有所了解。 在这一节中&#xff0c;我们一起来…

Mac电脑 窗口分屏管理 Magnet Pro

Magnet Pro Mac&#xff0c;是一款功能强大的窗口分屏管理工具&#xff0c;具有多种布局模式、窗口布局功能和其他工具&#xff0c;可以帮助您高效地进行多任务处理和管理工作。 拖动窗口到边缘&#xff0c;可将窗口大小调整到屏幕的一半。拖动窗口到角落&#xff0c;可将窗口…

http2与websocket关系

HTTP/2 和 WebSocket 协议本身确实不兼容&#xff0c;不能像在 HTTP/1.1 中那样用标准 WebSocket 协议&#xff08;ws:// / wss://&#xff09;进行升级握手。但这事儿细节比较多&#xff0c;下面详细讲讲&#xff1a; ✅ HTTP/2 与 WebSocket 的关系 HTTP/2 不直接支持 WebSo…

LoRA 与 CoT 冲突吗

对于一个具有CoT 能力的模型来说&#xff0c;采用普通的数据对其进行LoRA 微调可能会使原模型丢失CoT 能力&#xff0c;从而我们进行思考如下 CoT 与 LoRA 的“冲突”理解 目标不完全一致 导致的效果优化方向&#xff1a; CoT 侧重于提高推理能力和可解释性&#xff0c;它鼓励…

Python爬虫-爬取票牛明星演唱会数据,进行数据分析

前言 本文是该专栏的第61篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者以“票牛”平台为例。基于Python爬虫,采集“票牛”平台的明星演唱会(包含“演出城市,演出票价,演出时间”等等)的数据。 废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整…

uniapp的video遮盖了popup

video的默认层级太高&#xff0c;导致popup弹出的时候&#xff0c;部分被video遮挡了 可以利用cover-view&#xff0c;将popup以及内部所有的标签&#xff0c;全都换成cover-view&#xff0c;然后用一个变量控制其显隐 比如原始&#xff1a; 现在&#xff1a;

java面试题02访问修饰符有哪些?区别是什么?

访问修饰符是面向对象编程中实现封装的核心机制&#xff0c;用于控制类、属性、方法等成员的可见性&#xff08;可访问范围&#xff09;。不同的访问修饰符决定了其他类或代码在何处可以访问这些成员。 主要的访问修饰符及其区别如下&#xff08;以 Java 和 C# 为代表&#xf…

在小程序中实现上下左右拖动表格

在小程序的开发中&#xff0c;不可避免会出现上下左右拖动表格的类似需求&#xff0c;下面将把这个简单实现一下 其中主要使用到了overflow: scroll;来使得横向和纵向可以滚动&#xff0c;并且使用负边距 父容器截断的方法来同时隐藏横向和纵向滚动条&#xff0c;从而实现该效…

[MSPM0开发]之九 MSPM0G3507的ADC

[MSPM0开发]之九 MSPM0G3507的ADC 一、 MSPM0G3507 ADC概述二、 MSPM0G3507 ADC系统框图2.1 电压基准2.2 分辨率2.3 硬件均值计算2.4 采样触发源和采样模式2.5 转换模式2.6 转换结果数据格式2.7 高级特性2.7.1 非FIFO模式下的ADC操作&#xff08;单次转换和重复单次转换&#x…

门锁开关;与我们生活中紧密联系!

门锁开关作为日常生活的核心安全组件&#xff0c;其设计与应用直接影响家居安全、使用便捷性及设备寿命&#xff0c;以下是其关键价值与技术要点的系统分析&#xff1a; &#x1f512; ‌一、基础功能&#xff1a;安全与便利的平衡‌ ‌物理防护核心‌ ‌锁体结构‌&#xff1…

WRF-Hydro分布式水文模型:洪水预报、水资源管理与规划、生态水文研究、气候变化影响评估、流域综合管理、水电工程规划与运行

目录 第一部分&#xff1a;WRF-Hydro模型功能及运行流程、依赖库准备 第二部分&#xff1a;WRF-Hydro模式编译、离线运行及案例实践 第三部分&#xff1a;结合多案例进行模式数据制备及实践应用 【内容简述】&#xff1a; WRF-Hydro模型是一个分布式水文模型&#xff0c;‌…

OCRBench:评估多模态大模型的OCR能力

论文地址&#xff1a;OCRBench: On The Hidden Mystery of OCR In Large Multimodal Models&#xff1a;2305.07895 OCRBench在10个文本相关任务上测评多模态大模型&#xff08;LMM&#xff09;的OCR能力&#xff0c;包含1000个问题-答案对&#xff0c;每个问题-答案对包含以下…

servlet前后端交互

前后端交互目录 servlet流程servlet请求JSON格式实现表格效果完整代码 servlet流程 流程图&#xff1a; 客户端&#xff08;浏览器&#xff09;&#xff1a; 技术栈&#xff1a;使用 jQuery Ajax 发起异步请求。请求配置&#xff1a; 请求路径&#xff1a;指定目标Servlet的…

4. 时间序列预测的自回归和自动方法(2)

ar_model.AutoReg 模型通过应用以下元素来估计参数 条件最大似然&#xff08;CML&#xff09;估计量&#xff1a;这是一种涉及条件对数似然函数最大化的方法&#xff0c;据此认为已知的参数要么由理论假设固定&#xff0c;要么更常见地由估计值代替&#xff08;LewiseBeck&…

MySQL(84)如何配置MySQL防火墙?

MySQL防火墙&#xff08;MySQL Enterprise Firewall&#xff09;是一种MySQL企业版特性&#xff0c;用于保护数据库免受SQL注入和其他恶意活动的攻击。它通过学习和监控合法SQL语句&#xff0c;创建一个允许列表&#xff0c;从而阻止未在列表中的SQL语句。 1. 启用MySQL防火墙…