BFS:多源BFS问题

一、多源BFS简介

 超级源点:其实就是把相应的原点一次性都丢到队列中

二、01矩阵

. - 力扣(LeetCode)

class Solution {
public:const int dx[4]={1,-1,0,0};const int dy[4]={0,0,1,-1};vector<vector<int>> updateMatrix(vector<vector<int>>& mat) {//多源BFS  正难则反,以0为起点向外扩展int m=mat.size(),n=mat[0].size();vector<vector<int>> dis(m,vector<int>(n,-1));//要输出的数组 -1表示没有搜索过queue<pair<int,int>> q;//存储起点for(int i=0;i<m;++i)for(int j=0;j<n;++j)if(mat[i][j]==0){q.emplace(i,j);dis[i][j]=0;}//不需要标记数组 不需要step 也不需要控制一层一层出sz//因为dis数组不仅可以标记哪些地方没有搜索过或者搜索过,而且存储了最短距离while(!q.empty()){auto[a,b]=q.front();q.pop();for(int k=0;k<4;++k){int x=dx[k]+a,y=dy[k]+b;if(x>=0&&x<m&&y>=0&&y<n&&dis[x][y]==-1) {dis[x][y]=dis[a][b]+1;q.emplace(x,y);}}}return dis;}
};

三、飞地的数量

. - 力扣(LeetCode)

class Solution {
public:
//正难则反const int dx[4]={1,-1,0,0};const int dy[4]={0,0,1,-1};int numEnclaves(vector<vector<int>>& grid) {int m=grid.size(),n=grid[0].size();//从边开始进行一次宽搜 将可以走出边界的标记一下vector<vector<bool>> vis(m,vector<bool>(n));//将边界1的都丢到队列中queue<pair<int,int>> q;for(int i=0;i<m;++i)//第一行和最后一行for(int j=0;j<n;++j)if(i==0||i==m-1||j==0||j==n-1)if(grid[i][j]==1){q.emplace(i,j);vis[i][j]=true;}//进行多源BFSwhile(!q.empty()){auto [a,b]=q.front();q.pop();for(int k=0;k<4;++k){int x=dx[k]+a,y=dy[k]+b;if(x>=0&&x<m&&y>=0&&y<n&&grid[x][y]==1&&vis[x][y]==false){q.emplace(x,y);vis[x][y]=true;}}}//处理完之后,遍历一下找到没有被标记且为1的单元格 就可以统计个数了int ret=0;for(int i=0;i<m;++i)for(int j=0;j<n;++j)if(grid[i][j]==1&&vis[i][j]==false) ++ret;return ret;}
};

四、地球中的最高点

. - 力扣(LeetCode)

class Solution {
public:const int dx[4]={1,-1,0,0};const int dy[4]={0,0,1,-1};vector<vector<int>> highestPeak(vector<vector<int>>& isWater) {int m=isWater.size(),n=isWater[0].size();vector<vector<int>> vv(m,vector<int>(n,-1));//正难则反queue<pair<int,int>> q;for(int i=0;i<m;++i)for(int j=0;j<n;++j)if(isWater[i][j]==1){q.emplace(i,j);vv[i][j]=0;}//多源BFSwhile(!q.empty()){auto[a,b]=q.front();q.pop();for(int k=0;k<4;++k){int x=dx[k]+a,y=dy[k]+b;if(x>=0&&x<m&&y>=0&&y<n&&vv[x][y]==-1){vv[x][y]=vv[a][b]+1;q.emplace(x,y);}}}return vv;}
};

 五、地图分析

. - 力扣(LeetCode)

class Solution {
public:const int dx[4]={1,-1,0,0};const int dy[4]={0,0,1,-1};int maxDistance(vector<vector<int>>& grid) {int m=grid.size(),n=grid[0].size();vector<vector<int>> vv(m,vector<int>(n,-1));queue<pair<int,int>> q;for(int i=0;i<m;++i) for(int j=0;j<n;++j)if(grid[i][j]==1){q.emplace(i,j);vv[i][j]=0;}//多源BFSint ret=-1;//如果只有海洋或者只有陆地,那么就会直接返回-1while(!q.empty()){auto[a,b]=q.front();q.pop();for(int k=0;k<4;++k){int x=dx[k]+a,y=dy[k]+b;if(x>=0&&x<m&&y>=0&&y<n&&vv[x][y]==-1){vv[x][y]=vv[a][b]+1;q.emplace(x,y);ret=max(ret,vv[x][y]);}}}return ret;}
};

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

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

相关文章

Makefile--自动识别编译环境(x86还是arm)进行编译

在日常工作中&#xff0c;我们会在虚拟机下的x86系统进行架叉编译&#xff0c;有时需要在arm上直接进行编译。但工程都是一样的&#xff0c;只是Makefile不一样&#xff0c;这时就涉及到Makefile的灵活运用了。以下是一个自动识别编译环境的通用Makefile&#xff1a; TARGET_A…

headerpwn:一款针对服务器响应与HTTP Header的模糊测试工具

关于headerpwn headerpwn是一款针对服务器响应与HTTP Header的模糊测试工具&#xff0c;广大研究人员可以利用该工具查找网络异常并分析服务器是如何响应不同HTTP Header的。 功能介绍 当前版本的headerpwn支持下列功能&#xff1a; 1、服务器安全与异常检测&#xff1b; 2、…

PyTorch 1-深度学习

深度学习-PyTorch 一: Pytorch1> pytorch简介2> PyTorch 特点&优势3> pytorch简史4> pytorch 库5> PyTorch执行流程6> PyTorch 层次结构二: PyTorch常用的高级API和函数1> 自动求导(Autograd)2> 模型容器(Module)3> 优化器(Optimizer)4&g…

Java Stream API详解:高效处理集合数据的利器

引言 Java 8引入了许多新特性&#xff0c;其中最为显著的莫过于Lambda表达式和Stream API。Stream API提供了一种高效、简洁的方法来处理集合数据&#xff0c;使代码更加简洁明了&#xff0c;且具有较高的可读性和可维护性。本文将深入探讨Java Stream API的使用&#xff0c;包…

QFileDialog的简单了解

ps&#xff1a;写了点垃圾&#xff08;哈哈哈&#xff09; 它继承自QDialog 这是Windows自己的文件夹 这是两者的对比图&#xff1a; 通过看QFileDialog的源码&#xff0c;来分析它是怎么实现这样的效果的。 源码组成&#xff1a; qfiledialog.h qfiledialog_p.h&#xff…

Python面试宝典第11题:最长连续序列

题目 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xff1a;…

微信小程序中的数据通信

方法1: 使用回调函数 在app.js中:可以在修改globalData后执行一个回调函数,这个回调函数可以是页面传递给app的一个更新函数。// app.js App({globalData: {someData: ,},setSomeData(newData, callback) {this.globalData.someData = newData;if (typeof callback === funct…

打造热销爆款:LazadaShopee店铺测评与关键词策略

面对Lazada和Shopee平台上店铺销量难以突破的困境&#xff0c;卖家们往往寻求各种解决方案。其中&#xff0c;店铺测评作为提升店铺信誉、优化产品排名及增加曝光度的有效手段&#xff0c;正逐渐成为卖家关注的焦点。以下将深入探讨店铺测评的好处、实施技巧及自养号的关键要素…

提升校园效率:智慧校园后勤管理中的寻物管理功能

在智慧校园后勤管理体系中&#xff0c;寻物管理功能扮演着连接遗失与找回的桥梁角色&#xff0c;它充分利用现代信息技术&#xff0c;为校园内的师生提供了一套高效、便捷的失物招领解决方案。此功能围绕以下几个核心方面展开。 首先&#xff0c;它支持在线报失与信息登记。一旦…

如何连接到公司的服务器?

1.下载FileZilla FileZilla的下载与安装以及简单使用&#xff08;有图解超简单&#xff09;-CSDN博客 2.打开 3.输入主机 用户名 密码 端口 注&#xff1a;主机支持的协议类型&#xff1a; 4.连接成功 其他方式也有很多&#xff0c;比如通过cmd&#xff0c;html网页等等 3个…

昇思25天学习打卡营第19天|ShuffleNet图像分类

今天是参加昇思25天学习打卡营的第19天&#xff0c;今天打卡的课程是“ShuffleNet图像分类”&#xff0c;这里做一个简单的分享。 1.简介 在第15-18日的学习内容中&#xff0c;我们陆陆续续学习了计算机视觉相关的模型包括图像语义分割、图像分类、目标检测等内容&#xff0c…

面试迟到了怎么办

嗨&#xff0c;我是兰若姐姐。作为一名面试官&#xff0c;最近面试了很多的测试候选人&#xff0c;有了很多感慨&#xff0c;借此抒发一下&#xff0c;我不知道别人面试更看重的是什么&#xff0c;但是在我这里&#xff0c;我最看重的是态度&#xff0c;其次才是技能 我觉得作…

vivado EXTRACT_ENABLE、EXTRACT_RESET

可提取 EXTRACT_ENABLE控制寄存器推断是否启用。通常&#xff0c;Vivado工具 提取或不提取基于启发式方法&#xff0c;通常有利于最大程度的 设计。如果Vivado的行为不符合预期&#xff0c;此属性将覆盖 工具的默认行为。如果有不希望的启用连接到CE引脚 触发器&#xff0c;此属…

中关村软件园发布“数据合规与出境评估服务平台”

在2024中关村论坛年会期间&#xff0c;中关村软件园发布“数据合规与出境评估服务平台”。该平台是中关村软件园结合北京市“两区”建设&#xff0c;立足软件园国家数字服务出口基地和数字贸易港建设&#xff0c;围绕园区内外部企业用户的业务合作、科研创新、跨国运营等场景需…

Python UDP编程之实时聊天与网络监控详解

概要 UDP(User Datagram Protocol,用户数据报协议)是网络协议中的一种,主要用于快速、简单的通信场景。与TCP相比,UDP没有连接、确认、重传等机制,因此传输效率高,但也不保证数据的可靠性和顺序。本文将详细介绍Python中如何使用UDP协议进行网络通信,并包含相应的示例…

七天.NET 8操作SQLite入门到实战 - 第一天 SQLite 简介

什么是SQLite&#xff1f; SQLite是一个轻量级的嵌入式关系型数据库&#xff0c;它以一个小型的C语言库的形式存在。它的设计目标是嵌入式的&#xff0c;而且已经在很多嵌入式产品中使用了它&#xff0c;它占用资源非常的低&#xff0c;在嵌入式设备中&#xff0c;可能只需要几…

Vscode插件推荐——智能切换输入法(Smart IME)

前言 相信广大程序员朋友在写代码的时候一定会遇到过一个令人非常头疼的事情——切换输入法&#xff0c;特别是对于那些勤于写注释的朋友&#xff0c;简直就是噩梦&#xff0c;正所谓懒人推动世界发展&#xff0c;这不&#xff0c;今天就向大家推荐一款好用的vscode插件&#…

ES6 Class(类) 总结(九)

ES6 中的 class 是一种面向对象编程的语法糖&#xff0c;提供了一种简洁的方式来定义对象的结构和行为。 JavaScript 语言中&#xff0c;生成实例对象的传统方法是通过构造函数。下面是一个例子。 function Point(x, y) {this.x x;this.y y; } Point.prototype.toString fu…

使用定时器消除抖动

问题&#xff1a;定时器中断和按键中断属于什么操作模式&#xff0c;轮询吗&#xff1f; 具体怎么实现 定时器中断 &#xff08;判断&#xff09; 时间参数 按键中断&#xff08;修改&#xff09; 中断 向量表.s文件 DCD SysTick_Handler …

如何理解跨界营销?详解跨界营销的主要类型和方法!

跨界营销是一种创新的营销策略&#xff0c;它巧妙地捕捉不同行业、产品和消费者偏好之间的共通点和潜在联系。这种策略将看似不相关的元素相互融合&#xff0c;相互影响&#xff0c;创造出一种全新的生活方式和审美观念&#xff0c;以此吸引目标消费者群体的注意和青睐。 通过…