力扣75——圖廣度優先搜索

總結leetcode75中的圖廣度優先搜索算法題解題思路。
上一篇:力扣75——圖深度優先搜索

力扣75——圖廣度優先搜索

  • 1 迷宮中離入口最近的出口
  • 2 腐爛的橘子
  • 1-2 解題總結

1 迷宮中離入口最近的出口

題目:

給你一個 m x n 的迷宮矩陣 maze (下標從 0 開始),矩陣中有空格子(用 '.' 表示)
和墻(用 '+' 表示)。同時給你迷宮的入口 entrance ,用 entrance = [entrancerow, entrancecol] 表示你一開始所在格子的行和列。
每一步操作,你可以往 上,下,左 或者 右 移動一個格子。你不能進入墻所在的格子,
你也不能離開迷宮。你的目標是找到離 entrance 最近 的出口。出口 的含義是 maze 
邊界 上的 空格子。entrance 格子 不算 出口。請你返回從 entrance 到最近出口的最短路徑的 步數 ,如果不存在這樣的路徑,請你返回 -1

題解:
廣度優先搜索
將與入口相鄰的空格子壓入隊列。
然后用while循環遍歷隊列中的格子,每個訪問過的格子都要做標記(記錄它到入口的距離,并將狀態設置為已訪問)。
如果當前格子為出口,則返回距離d+1
如果訪問玩所有格子,則返回-1

class Solution {
public:int nearestExit(vector<vector<char>>& maze, vector<int>& entrance) {int m = maze.size();int n = maze[0].size();// 上下左右四個相鄰坐標對應的行列變化量vector<int> dx = {1, 0, -1, 0};vector<int> dy = {0, 1, 0, -1};queue<tuple<int, int, int>> q;// 入口加入隊列并修改為墻q.emplace(entrance[0], entrance[1], 0);maze[entrance[0]][entrance[1]] = '+';while (!q.empty()){auto [cx, cy, d] = q.front();q.pop();// 遍歷四個方向相鄰坐標for (int k = 0; k < 4; ++k){int nx = cx + dx[k];int ny = cy + dy[k];// 新坐標合法且不為墻if (nx >= 0 && nx < m && ny >= 0 && ny < n && maze[nx][ny] == '.'){if (nx == 0 || nx == m - 1 || ny == 0 || ny == n - 1){// 新坐標為出口,返回距離作為答案return d + 1;}// 新坐標為空格子且不為出口,修改為墻并加入隊列maze[nx][ny] = '+';q.emplace(nx, ny, d + 1);}}}// 不存在到出口的路徑,返回 -1return -1;}
};

2 腐爛的橘子

題目:

在給定的 m x n 網格 grid 中,每個單元格可以有以下三個值之一:值 0 代表空單元格;
值 1 代表新鮮橘子;
值 2 代表腐爛的橘子。
每分鐘,腐爛的橘子 周圍 4 個方向上相鄰 的新鮮橘子都會腐爛。返回 直到單元格中沒有新鮮橘子為止所必須經過的最小分鐘數。如果不可能,返回 -1

題解:
廣度優先搜索
定義矩陣dis,記錄每個橘子是從第幾天開始腐爛的。-1表示未腐爛或者沒有橘子。
先找出所有腐爛的句子,并將其位置存入隊列Q
while遍歷Q中的爛橘子,如果爛橘子grid[i][j]的周圍有未腐爛的橘子,則將對應的dis值改為dis[i][j]+1,并將該橘子的位置壓入隊列Q
Q為空之后,查看是否全部腐爛。

class Solution {int cnt;int dis[10][10];int dir_x[4]={0, 1, 0, -1};int dir_y[4]={1, 0, -1, 0};
public:int orangesRotting(vector<vector<int>>& grid) {queue<pair<int,int> >Q;memset(dis, -1, sizeof(dis));cnt = 0;int n=(int)grid.size(), m=(int)grid[0].size(), ans = 0; for (int i = 0; i < n; ++i){for (int j = 0; j < m; ++j){if (grid[i][j] == 2){Q.push(make_pair(i, j));dis[i][j] = 0;}else if (grid[i][j] == 1) cnt += 1;}}while (!Q.empty()){pair<int,int> x = Q.front();Q.pop();for (int i = 0; i < 4; ++i){int tx = x.first + dir_x[i];int ty = x.second + dir_y[i];if (tx < 0|| tx >= n || ty < 0|| ty >= m|| dis[tx][ty]!=-1 || !grid[tx][ty]) continue;dis[tx][ty] = dis[x.first][x.second] + 1;Q.push(make_pair(tx, ty));cnt -= 1;ans = dis[tx][ty];if (!cnt) break;}}return cnt ? -1 : ans;}
};

1-2 解題總結

題目共同的特點:從起始節點出發,搜索并記錄某個或全部節點到起始節點的距離。
是否能用深度優先搜索:不能,因為有些節點可以通過多條路徑到達起始節點,如果用深度優先搜索,不能保證某條深度搜索路徑算出來的距離是該節點的最短距離。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41407.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41407.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41407.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kafka中的 ISR 機制

ISR 是什么 ISR 的全稱叫做&#xff1a; In-Sync Replicas &#xff08;同步副本集&#xff09;, 可以理解為和 leader 保持同步的所有副本的集合。ISR 動態維護了一個和 leader 副本保持同步副本集合&#xff0c;ISR 中的副本全部都和 leader 的數據保持同步。 設一個場景&a…

JupyterHub實戰應用

一、JupyerHub jupyter notebook 是一個非常有用的工具&#xff0c;我們可以在瀏覽器中任意編輯調試我們的python代碼&#xff0c;并且支持markdown 語法&#xff0c;可以說是科研利器。但是這種情況適合個人使用&#xff0c;也就是jupyter notebook以我們自己的主機作為服務器…

PostgreSQL邏輯備份pg_dump使用及其原理解析

一、原理分析 1、循環調用getopt_long解析命令行參數&#xff0c;將參數保存到static DumpOptions dopt;中 2、判斷參數是否相容&#xff0c;不相容則退出&#xff1a; options -s/--schema-only and -a/--data-only cannot be used togetheroptions -c/--clean and -a/--data…

uni-app中監聽網絡狀態,并在嵌入webView頁面的組件中添加網絡監測

uni-app中監聽網絡狀態&#xff0c;并在嵌入webView頁面的組件中添加網絡監測 uni-app中監聽網絡狀態 下載插件 打開網絡異常組件頁面&#xff0c;點擊"下載插件并導入HBuilderX"按鈕&#xff0c;打開HBuilderX軟件后&#xff0c;選擇需要導入插件的項目&#xff…

機器學習與模型識別1:SVM(支持向量機)

一、簡介 SVM是一種二類分類模型&#xff0c;在特征空間中尋找間隔最大的分離超平面&#xff0c;使得數據得到高效的二分類。 二、SVM損失函數 SVM 的三種損失函數衡量模型的性能。 1. 0-1 損失&#xff1a; 當正例樣本落在 y0 下方則損失為 0&#xff0c;否則損失為…

系統架構設計師-信息安全技術(1)

目錄 一、信息安全基礎 1、信息安全五要素 2、網絡安全漏洞 3、網絡安全威脅 4、安全措施的目標 二、信息加解密技術 1、對稱加密 2、非對稱加密 3、加密算法對比 三、密鑰管理技術 1、數字證書 2、PKI公鑰體系 四、訪問控制技術 1、訪問控制基本模型 2、訪問控制的實現技術…

【Linux命令詳解 | ssh命令】 ssh命令用于遠程登錄到其他計算機,實現安全的遠程管理

文章標題 簡介一&#xff0c;參數列表二&#xff0c;使用介紹1. 連接遠程服務器2. 使用SSH密鑰登錄2.1 生成密鑰對2.2 將公鑰復制到遠程服務器 3. 端口轉發3.1 本地端口轉發3.2 遠程端口轉發 4. X11轉發5. 文件傳輸與遠程命令執行5.1 文件傳輸5.1.1 從本地向遠程傳輸文件5.1.2 …

TensorFlow 的基本概念和使用場景

簡介 TensorFlow 是一個開源的人工智能框架&#xff0c;由 Google 公司開發&#xff0c;用于構建和訓練機器學習模型。 TensorFlow 的基本概念包括&#xff1a; 1. 張量 (Tensor): TensorFlow 中的基本數據結構&#xff0c;可以理解為多維數組。 2. 計算圖 (Graph): TensorF…

深度學習入門-3-計算機視覺-圖像分類

1.概述 圖像分類是根據圖像的語義信息對不同類別圖像進行區分&#xff0c;是計算機視覺的核心&#xff0c;是物體檢測、圖像分割、物體跟蹤、行為分析、人臉識別等其他高層次視覺任務的基礎。圖像分類在許多領域都有著廣泛的應用&#xff0c;如&#xff1a;安防領域的人臉識別…

軟考筆記——9.軟件工程

軟件工程的基本原理&#xff1a;用分階段的生命周期計劃嚴格管理、堅持進行階段評審、實現嚴格的產品控制、采用現代程序設計技術、結果應能清除的審查、開發小組的人員應少而精、承認不斷改進軟件工程事件的必要性。 軟件工程的基本要素&#xff1a;方法、工具、過程 軟件生…

babylonjs基于自定義網格生成圍欄動畫

效果&#xff1a; import { Vector3, Mesh, MeshBuilder, StandardMaterial, Texture, Animation, Color3 } from "babylonjs/core"; import imgUrl from "./image/headerwangge2.png" // 創建模型護欄特效 export default class CreateRail {constructor…

cocos creator 設置精靈鏡像翻轉效果

在 Cocos Creator 中&#xff0c;你可以通過代碼來設置精靈節點的鏡像翻轉效果。具體來說&#xff0c;你可以使用精靈節點的 setScale 方法來實現這一點。以下是在代碼中設置水平鏡像翻轉和垂直鏡像翻轉的示例&#xff1a; // 獲取精靈節點的引用 let spriteNode cc.find(&qu…

小程序swiper一個輪播顯示一個半內容且實現無縫滾動

效果圖&#xff1a; wxml&#xff08;無縫滾動&#xff1a;circular"true"&#xff09;&#xff1a; <!--components/tool_version/tool_version.wxml--> <view class"tool-version"><swiper class"tool-version-swiper" circul…

數模論文寫作細節要求

目錄 優秀論文必要條件 數學建模的基本思路 第一步&#xff1a;了解問題——查文獻、找數據 第二步&#xff1a;闡述要解決什么問題、用什么方法 其余步驟&#xff1a;給出數學模型、計算求解、對比結果與真實情況、應用于現實問題。 使用某種數學方法的理由和依據 創…

Python爬蟲性能優化:多進程協程提速實踐指南

各位大佬們我又回來了&#xff0c;今天我們來聊聊如何通過多進程和協程來優化Python爬蟲的性能&#xff0c;讓我們的爬蟲程序6到飛起&#xff01;我將會提供一些實用的解決方案&#xff0c;讓你的爬蟲速度提升到新的高度&#xff01; 1、多進程提速 首先&#xff0c;讓我們來看…

cs231n assignment2 q5 PyTorch on CIFAR-10

文章目錄 嫌啰嗦直接看源碼Q5 :PyTorch on CIFAR-10three_layer_convnet題面解析代碼輸出 Training a ConvNet題面解析代碼輸出 ThreeLayerConvNet題面解析代碼輸出 Train a Three-Layer ConvNet題面解析代碼輸出 Sequential API: Three-Layer ConvNet題面解析代碼輸出 CIFAR-1…

SpringBoot整合ArtemisMQ筆記

SpringBoot整合ArtemisMQ筆記 本案例是springboot2.4.2整合Apache ArtemisMQ, 發送jms信息和訂閱jms消息的代碼示例pom配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-artemis</artifactId><…

BT利器之wazuh

目錄 一、什么是wazuh 二、wazuh的安裝 1.倉庫安裝 2.虛擬機OVA安裝 3.其他安裝方式 三、淺析wazuh的規則、解碼器等告警原理以及主動響應 1.主動響應(active-response) 2.告警信息(alerts) 3.規則以及解碼器(rules and decoders) 3.1.規則 3.2.解碼器 4.linux后門r…

力扣75——圖深度優先搜索

總結leetcode75中的圖深度優先搜索算法題解題思路。 上一篇&#xff1a;力扣75——二叉搜索樹 力扣75——圖深度優先搜索 1 鑰匙和房間2 省份數量3 重新規劃路線4 除法求值1-4 解題總結 1 鑰匙和房間 題目&#xff1a; 有 n 個房間&#xff0c;房間按從 0 到 n - 1 編號。最初…

【Matter】基于Ubuntu 22.04搭建matter開發環境:chip-tool 配網之 matter-over-wifi

前言 主要是記錄一下學習過程&#xff0c;梳理下思路&#xff0c;拋轉~ 官方的開發環境&#xff0c;基于Linux版本&#xff0c;官方的環境是基于樹莓派環境的&#xff0c;原理其實也比較明了&#xff0c;目的也比較明確&#xff0c;就是達到Linux 主機和wifi 路由在同一局域網…