藍橋杯---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.pswp.cn/bicheng/75208.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75208.shtml
英文地址,請注明出處:http://en.pswp.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…