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
英文地址,請注明出處:http://en.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防火墻…