蓝桥杯---BFS解决FloofFill算法1---图像渲染

文章目录

  • 1.算法简介
  • 2.题目概述
  • 3.算法原理
  • 4.代码分析

1.算法简介

这个算法是关于我们的floodfill的相关的问题,这个算法其实从名字就可以看出来:洪水灌溉,其实这个算法的过程就和他的名字非常相似,下面的这个图就生动的展示了这个算法的相关原理;

其实这个就是想要找到性质相同的联通快:使用下面的这个图形里面的数据作为例子,第二行第二列的这个数据是5,当洪水从左上角进来的时候,你可以把这个区域想象成为一个梯田,当洪水来临的时候,左上角的这个-1,-2,-3都会被淹掉,我们可以把这个想象成为地理上面学习的这个等高线之类的,地势低的位置肯定是先被淹掉,这个应该是很容易理解的;

同理,当这个洪水从右上方来临的时候,负数的更小,对应的这个区域肯定会被淹没,这个是显然的;

大致就是这个过程,为什么这个和我们的bfs相关呢?因为我们确定这个被淹没的区域的时候,思路就是从他身边的进行比较,如果高的话,自己肯定机会呗淹没了,但是如果对方低的话,对方就会被淹掉,通过不断的这个遍历搜索的过程,最终确定想要的结果;

这个思路比较简单,但是过程很抽象,我们通过leetcode上面的一个具体的题目进行说明;

image-20250326225519375

2.题目概述

下面的这个就是关于洪水灌溉的题目:leetcode773图像渲染;

image-20250331210936927

解释一下上面的这个示例想要表达的意思把:我觉得相对于上面的大段的文字,这个示例图示会更加容易理解一些,这个示例的意思就是给你一个sr,sc,color,这个sr和sc表示的就是需要被渲染的搜索起点,我们从这个位置开始,这个color就是把这个相关的符合条件的点全部染成这个color对应的颜色;

看这个(1,1)表示的就是第二行的第二列对应的元素,这个很好理解,这个元素就是1,而我们需要渲染的这个颜色就是2,两个是不一样的,因此这个需要我们进行操作,如果两个的颜色是一样的,这个过程就是多余的,因此我们写代码的时候需要进行判断一下;

周围的这个点必须是直接相邻的,可以是sr,sc的邻居,也可以是他的邻居的邻居,大家可以理解我的意思吧,总之这个区域需要是联通的,不可以是分散的孤立的,这个是重点;

3.算法原理

理解上面的这个题目对应的示例之后,接下来开始进行这个算法的原理的分析:

下面的这个是一个新的图,进行这个算法的原理的说明,sr,sc还是(1,1),color=2,说明以这个(1,1)作为起点,这个color就是我们想要把这个相关的点染成的颜色为2;

下面的这个是第一步,现对于这个(1,1)上下左右的位置进行判断:发现了两个目标,就是图里面的斜线经过的两个点的位置;

image-20250331211755582

下面的是新的一轮的搜索,这个时候是以上面的两个作为基础,继续操作,这个时候又找到了三个符合条件的数据点的坐标

image-20250331211816075

下面的这个是:在上一步的基础上面继续操作,这个时候找到了两个符合条件的坐标;

image-20250331211835701

接下来轮到第四层的时候,发现第三层的这个元素的周围已经没有其他的元素的,因此这个时候我们的这个广度优先遍历的过程就结束了;

4.代码分析

  1. 刚开始的这个dx,dy数组是后面进行上下左右的遍历的时候用到的,下面的这个图片会进行说明;
  2. prev就是题目给定的这个位置的元素值,我们需要判断他和color是不是一样的,如果是有一样的,接下来就不需要进行判断了;
  3. m,n的定义主要是为了越界问题的定义,我们首先把这个sr,sc放到这个队列里面去;
  4. 循环里面,我们取出来这个对首的元素,因为这个队列里面的每一个元素都是一个二维的数组,我们使用这个a,b记录他对应的横纵坐标即可,然后进行对应的颜色的渲染;
  5. 里面的这个for循环就是上下左右进行判断的,符合条件的进行染色,最后返回处理之后的image即可;
class Solution {int[] dx={0,0,1,-1};int[] dy={1,-1,0,0};public int[][] floodFill(int[][] image, int sr, int sc, int color) {int prev=image[sr][sc];if(prev==color) return image;int m=image.length,n=image[0].length;Queue<int[]> q=new LinkedList<>();q.add(new int[]{sr,sc});while(!q.isEmpty()){int[] t=q.poll();int a=t[0],b=t[1];image[a][b]=color;for(int i=0;i<4;i++){int x=a+dx[i],y=b+dy[i];if(x>=0&&x<m&&y>=0&&y<n&&image[x][y]==prev){q.add(new int[]{x,y});}}}return image;}
}

下面的这个图是说明我们的上下左右的坐标是如何表示的:

上下左右,发现这个点的坐标就是-1,+1的操作,因此我们定义了这个dx,dy数组,在上面的这个代码的for循环里面,我们使用这个数组相当于是完成了对于这个已知点的周围的几个点的判断,这个很方便,大家可以借鉴一下;

操作,因此我们定义了这个dx,dy数组,在上面的这个代码的for循环里面,我们使用这个数组相当于是完成了对于这个已知点的周围的几个点的判断,这个很方便,大家可以借鉴一下;

image-20250326231834152

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

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

相关文章

我与数学建模之启程

下面的时间线就是从我的大二上开始 9月开学就迎来了本科阶段最重要的数学建模竞赛——国赛&#xff0c;这个比赛一般是在9月的第二周开始。 2021年国赛是我第一次参加国赛&#xff0c;在报名前我还在纠结队友&#xff0c;后来经学长推荐找了另外两个学长。其实第一次国赛没啥…

利用 SSRF 和 Redis 未授权访问进行内网渗透

目录 环境搭建 ​编辑 发现内网存活主机 ​编辑 扫描内网端口 ​编辑 利用 Redis 未授权访问进行 Webshell 写入 步骤1&#xff1a;生成 payload 方式1&#xff1a;使用python生成 payload 方式二&#xff1a;使用 Gopher 工具 步骤 2&#xff1a;写入 Webshell&#xf…

【Vue2插槽】

Vue2插槽 Vue2插槽默认插槽子组件代码&#xff08;Child.vue&#xff09;父组件代码&#xff08;Parent.vue&#xff09; 命名插槽子组件代码&#xff08;ChildNamed.vue&#xff09;父组件代码&#xff08;ParentNamed.vue&#xff09; 代码解释 Vue2插槽 Vue2插槽 下面为你详…

ORB-SLAM学习感悟记录

orb特征点的旋转不变性 利用灰度质心法求出的质心后&#xff0c;与形心连线所形成的角度如下图所示&#xff1a; 这里容易对上图进行误解&#xff1a; 为了保证旋转不变性&#xff0c;这里注意ORB-slam是利用这个角度旋转坐标系&#xff0c;以新坐标系为标准从图像中采点进行…

搜索算法------深度优先搜索

1. 介绍 深度优先搜索&#xff08;Depth-First Search&#xff0c;DFS&#xff09;是一种用于遍历或搜索树或图的算法。这种算法通过尽可能深地搜索图的分支来探索解决方案空间&#xff0c;直到达到一个没有分支的点&#xff0c;然后回溯 1.1 原理 选择起始点&#xff1a;从…

4.2 单相机引导机器人放料-仅考虑角度变化

【案例说明】 本案例产品在托盘中,角度变化不大(<15度);抓取没有问题,只是放的穴位只能容许3度的角度偏差,因此需要测量产品的角度。 思路是:机器人抓料后、去固定拍照位拍照(找到与标准照片的角度偏差),机器人在放料的位置上多旋转这个角度偏差,把产品放进去。 …

六级词汇量积累day13

commend 表扬 exhaust 耗尽&#xff0c;用尽 weary 疲惫的&#xff0c;劳累的 fatigue 疲惫&#xff0c;劳累 obese 臃肿的&#xff0c;肥胖的 adopt 采纳&#xff0c;收养 adapt 适应 accomplish 完成&#xff0c;实现 accomplishment 成就 achieve 实现&#xff0c;完成 achi…

医院信息系统与AI赋能的介绍

随着医疗行业的不断发展&#xff0c;医院信息系统&#xff08;HIS&#xff0c;Hospital Information System&#xff09;已经成为现代医疗服务不可或缺的一部分。医院信息系统通过数字化、信息化手段&#xff0c;有效地整合了医院内部的医疗、财务、后勤等各个业务环节&#xf…

突发,国行 iPhone 17,支持 eSIM

古人云“无心生大用”&#xff0c;往往你感到绝望的时候&#xff0c;转机就莫名其妙的来了。 根据供应链的最新消息&#xff0c;国行 iPhone 17 Air&#xff0c;有望用上 eSIM。 不仅如此&#xff0c;国产手机厂商&#xff0c;也计划推出类似iPhone 17 Air的超薄机型&#xf…

【C++项目】从零实现RPC框架「三」:项⽬抽象层实现

🌈 个人主页:Zfox_ 🔥 系列专栏:C++从入门到精通 目录 一:🔥 常⽤的零碎功能接⼝类实现🦋 简单⽇志宏实现🦋 Json 序列化/反序列化🦋 UUID ⽣成二:🔥 项⽬消息类型字段信息定义 🦋 请求字段宏定义🦋 消息类型定义🦋 响应码类型定义🦋 RPC 请求类型定…

Hadoop集群常用指令详解

在大数据处理领域&#xff0c;Hadoop作为分布式计算和存储的开源框架&#xff0c;已经成为不可或缺的工具。掌握Hadoop集群的常用指令对于集群的日常管理和操作至关重要。本文将详细介绍Hadoop集群的常用指令&#xff0c;帮助读者更好地理解和使用Hadoop。 一、Hadoop集群的启…

几种常见的.NET单元测试模拟框架介绍

目录 1. Moq 2. NSubstitute 3. AutoFixture 4. FakeItEasy 总结对比 单元测试模拟框架是一种在软件开发中用于辅助单元测试的工具。 它的主要作用是创建模拟对象来替代真实对象进行测试。在单元测试中&#xff0c;被测试的代码可能依赖于其他组件或服务&#xff0c;如数…

蓝桥杯备赛之枚举

用循环等方式依次去枚举所有的数字组合&#xff0c;一一验证是否符合题目的要求 题目链接 0好数 - 蓝桥云课 题目解析 好数的概念: 数的奇数位位奇数,偶数位为偶数,就是一个好数 求输入n里面有多少个好数 题目原理 1> 遍历每个数 2> 每次遍历判断是不是好数 把这…

9、tlm 事务交互通信

1、TLM&#xff08;Transaction-Level Modeling&#xff09; 是 SystemC 的高级建模方法&#xff0c;用于描述系统的通信行为&#xff0c;特别是在硬件设计和验证中。TLM 是 SystemC 的一部分&#xff0c;用于提高仿真的效率和抽象性。以下是 TLM 的核心知识以及关键概念。 2、…

小白入门机器学习概述

文章目录 一、引言二、机器学习的基础概念1. 机器学习的定义2. 机器学习的类型&#xff08;1&#xff09;监督学习&#xff08;Supervised Learning&#xff09;&#xff08;2&#xff09;无监督学习&#xff08;Unsupervised Learning&#xff09;&#xff08;3&#xff09;半…

smartdns 在企业场景中的应用心得

smartdns 是一款优秀的本地dns服务器&#xff0c;默认开启的配置在小型环境下足够使用(50台终端)&#xff0c;在面对中大型网络环境时&#xff08;100台终端&#xff0c;且有多层网络结构&#xff09;&#xff0c;需要增加更多的配置来确保稳定运行。 一、删除注释&#xff0c;…

【12】Ajax的原理和解析

一、前言 二、什么是Ajax 三、Ajax的基本原理 3.1 发送请求 3.2 解析内容 3.3 渲染网页 3.4 总结 四、Ajax 分析 五、过滤请求-筛选所有Ajax请求 一、前言 当我们在用 requests 抓取页面的时候&#xff0c;得到的结果可能会和在浏览器中看到的不一样&a…

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的安全性:使用 Spring Security 实现认证与授权

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…

百元不入耳蓝牙耳机哪个品牌好用?2025百元不入耳耳机品牌推荐

在选择蓝牙耳机时&#xff0c;许多用户开始关注不入耳式设计&#xff0c;不仅能避免耳道不适&#xff0c;还能保持对环境音的感知&#xff0c;提升运动、通勤或日常使用的安全性。而在百元价位中&#xff0c;不入耳式耳机的品牌众多&#xff0c;产品质量参差不齐&#xff0c;如…

如何加强 SSH 安全:内网和专用网络环境下的防护策略

文章目录 如何加强 SSH 安全&#xff1a;内网和专用网络环境下的防护策略限制访问来源通过防火墙或安全组限制网络策略&#xff08;Network Policy&#xff09; 禁用密码登录&#xff0c;使用密钥认证启用 Fail2ban 或 SSH 防爆破限制 SSH 用户更改 SSH 端口使用跳板机&#xf…