【C++算法】89.多源BFS_01 矩陣

文章目錄

    • 題目鏈接:
    • 題目描述:
    • 解法
    • C++ 算法代碼:


題目鏈接:

542. 01 矩陣


題目描述:

618f987629255735da73c0141c8aee06


解法

先看懂題目

79bfd0bef099c5a7ea36d98beb0da475

解法一:一個位置一個位置求(最差的情況下會非常恐怖)

解法二:多源BFS+正難則反

把1當成起點就很難,因為不好更新。

所以把0當作起點,1當作終點,從0開始向外擴展,遇到1就把最短路數填進去。

  1. 把所有的0位置加入到隊列中
  2. 一層一層的向外擴展即可

C++ 算法代碼:

class Solution {// 四個方向的移動:右、左、下、上int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};public:vector<vector<int>> updateMatrix(vector<vector<int>>& mat) {int m = mat.size(), n = mat[0].size();// 初始化距離矩陣// dist[i][j] == -1 表示該位置還未被訪問// dist[i][j] != -1 表示該位置到最近0的距離vector<vector<int>> dist(m, vector<int>(n, -1));queue<pair<int, int>> q;// 1. 多源BFS初始化:將所有0的位置作為起點for (int i = 0; i < m; i++)for (int j = 0; j < n; j++)if (mat[i][j] == 0) {q.push({i, j});dist[i][j] = 0;  // 0到自己的距離是0}// 2. 開始BFS遍歷while (q.size()) {auto [a, b] = q.front();q.pop();// 遍歷四個方向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 && dist[x][y] == -1) {// 更新距離:當前點的距離 = 前一個點的距離 + 1dist[x][y] = dist[a][b] + 1;// 將新位置加入隊列,繼續BFSq.push({x, y});}}}return dist;  // 返回距離矩陣}
};

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

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

相關文章

數據結構之 【排序】(歸并排序)

目錄 1.遞歸實現歸并排序的思想及圖解 2.遞歸實現歸并排序的代碼邏輯 2.1嵌套子函數 2.2遞歸過程 2.3遞歸結束條件 2.4歸并及拷貝過程 3.非遞歸實現歸并排序的思想及圖解 4.非遞歸實現歸并排序的代碼邏輯 4.1邊歸并邊拷貝 4.2某一gap下歸并完成才進行拷貝 5.歸并排…

企業如何選擇適合的高防服務器?

高防服務器租用哪家好&#xff1f;這個問題困擾著許多站長&#xff0c;建立的網站經常受到各種網絡攻擊&#xff0c;雖然高防服務器有著較高的防御性能&#xff0c;十分適合經常被攻擊的行業網站&#xff0c;但是如何租到滿意的高防服務器呢&#xff01;徐州高防服務器是部署在…

告別重復勞動:Ansible 自動化運維超詳細學習路線圖

在運維的世界里&#xff0c;我們總是在與重復性任務作斗爭&#xff1a;部署同一套環境 N 次、在幾十臺服務器上修改同一個配置文件、一遍又一遍地執行相同的發布流程……這些工作不僅枯燥&#xff0c;還極易出錯。 如果你也為此感到煩惱&#xff0c;那么 Ansible 就是為你量身打…

UDS 0x29 身份驗證服務 Authentication service

背景 0x29服務的目的是為客戶端提供一種證明其身份的方法&#xff0c;在ECU端&#xff0c;有些服務或者數據因信息安全、排放或功能安全原因而受到嚴格限制。 只有身份驗證通過之后&#xff0c;才能夠允許其訪問數據和/或診斷服務。 例如&#xff0c;用于將數據下載/上傳到ECU以…

【python高階】-1- python工程和線程并發

一、項目工程守則1.pdm新建一個項目命令行終端&#xff1a;pip install pdmpdm init版本號&#xff1a;x.y.zx:兼容版本y:新增功能z:補丁版本pdm add pytest requests (添加依賴)pdm是協助管理我們的項目 2. black就是規范我們的代碼風格的&#xff1a;pdm add blackblackblack…

YOLOv8 剪枝模型加載踩坑記:解決 YAML 覆蓋剪枝結構的問題

1. 問題背景模型剪枝是實現模型輕量化、加速推理的關鍵步驟。然而&#xff0c;在 Ultralytics YOLOv8 的生態中&#xff0c;在成功剪枝后&#xff0c;進行微調&#xff08;Fine-tuning&#xff09;時會遇到一個令人困惑的現象&#xff1a;明明加載的是剪枝后的模型&#xff08;…

js的學習1

1.數組 數組方法 push()數組尾部添加unshift()數組頭部添加pop()數組尾部刪除shift()數組頭部刪除splice(起始位置&#xff0c;刪除幾個元素&#xff0c;要替換的元素)刪除指定的元素&#xff0c;改變了原數組&#xff0c;返回值是被刪除的元素indexOf()第一次查到的索引&#…

LeetCode 2563.統計公平數對的數目

給你一個下標從 0 開始、長度為 n 的整數數組 nums &#xff0c;和兩個整數 lower 和 upper &#xff0c;返回 公平數對的數目 。 如果 (i, j) 數對滿足以下情況&#xff0c;則認為它是一個 公平數對 &#xff1a; 0 < i < j < n&#xff0c;且 lower < nums[i] n…

ZABBIX配置自動發現與自動注冊,網易郵箱告警和釘釘告警

一、自動發現zabbix server 主動的去發現所有的客戶端&#xff0c;然后將客戶端的信息登記在服務端上。缺點是如果定義的網段中的主機數量多&#xff0c;zabbix server 登記耗時較久&#xff0c;且壓力會較大。1、部署準備準備三臺虛擬機192.168.80.151&#xff1b;192.168.80.…

QT(五)常用類

1. QString字符串類(掌握) QString是Qt的字符串類&#xff0c;與C的string相比&#xff0c;不再使用ASCII編碼&#xff0c;QString使用的是Unicode編碼。 QString中每個字符都是一個16位的QChar&#xff0c;而不是8位的char。 QString完全支持中文&#xff0c;但是由于不同的技…

EXCEL怎么提取表名

錯誤的方法&#xff1a;使用以下方法提取表名的時候&#xff0c;會存在1個問題&#xff0c;公式只在當前工作表生效&#xff0c;換工作表會出現表名覆蓋的情況。RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename&quo…

springboot校園外賣配送系統

目 錄 第一章 緒 論 1.1背景及意義 1.2國內外研究概況 1.3 研究的內容 第二章 關鍵技術的研究 2.1開發技術 2.2 Springboot框架介紹 2.3 Vue.js 主要功能 2.4 MVVM模式介紹 2.4 B/S體系工作原理 2.5 MySQL數據庫 第三章 系統分析 3.1 系統設計目標 3.2 系統可行性…

【智慧物聯網平臺】安裝部署教程——仙盟創夢IDE

一、部署前準備1. 環境要求基礎環境&#xff1a;JDK 1.8、MySQL 5.7/8.0、Maven 3.6、Redis&#xff08;用于緩存&#xff09;、Node.js&#xff08;用于前端構建&#xff0c;可選&#xff09;。依賴服務&#xff1a;若需對接門禁、道閘等硬件設備&#xff0c;需確保設備網絡可…

【安全漏洞】防范未然:如何有效關閉不必要的HTTP請求方法,保護你的Web應用

在構建和維護Web應用的過程中&#xff0c;安全問題總是我們最關心的話題之一。今天&#xff0c;我們要探討的是一個經常被忽視的Web漏洞——未關閉或限制不必要的HTTP請求方法。 雖然我們在日常開發中主要使用 GET 和 POST 這兩種請求方法&#xff0c;但像 PUT、DELETE、HEAD、…

嵌入式Linux裸機開發筆記8(IMX6ULL)主頻和時鐘配置實驗(1)

引言在前幾章實驗中我們都沒有涉及到 I.MX6U 的時鐘和主頻配置操作&#xff0c;全部使用的默認配置&#xff0c; 默認配置下 I.MX6U 工作頻率為 396MHz。但是 I.MX6U 系列標準的工作頻率為 528MHz&#xff0c;有些 型號甚至可以工作到 696MHz。本章學習 I.MX6U 的時鐘系統&…

設計模式(四)創建型:生成器模式詳解

設計模式&#xff08;四&#xff09;創建型&#xff1a;生成器模式詳解生成器模式&#xff08;Builder Pattern&#xff09;是 GoF 23 種設計模式中的核心創建型模式之一&#xff0c;其核心價值在于將一個復雜對象的構建過程與其表示分離&#xff0c;使得同樣的構建過程可以創建…

《Angular+Spring Boot:ERP前端采購銷售庫存協同架構解析》

基于Angular與Spring Boot構建的全棧ERP前端&#xff0c;絕非技術的簡單疊加&#xff0c;而是通過深度融合兩者特性&#xff0c;打造出兼具穩定性與靈活性的業務載體。Angular的組件化架構將復雜界面拆解為可復用的獨立單元&#xff0c;依賴注入機制則讓服務調用與數據流轉條理…

Java 排序

文章目錄排序插入排序分析希爾排序分析選擇排序分析堆排序分析冒泡排序分析快速排序霍爾法分析挖坑法找基準前后指針法題目快排的優化三數取中法非遞歸實現快排歸并排序分析非遞歸實現歸并排序海量數據的排序非比較的排序計數排序分析基數排序桶排序排序 穩定的排序&#xff1…

日本IT就職面試|儀容禮儀篇分享建議

日系企業で好印象を與える「身だしなみ」と「面接マナー」ガイドこんにちは。 日系企業への就職?転職活動をされている方にとって、「第一印象」は合否を左右する大切なポイントですよね。実は、面接の評価は入室の瞬間から始まっていると言っても過言ではありません。 今回は…

英語聽力口語詞匯-8.美食類

1.crispy,crisp adj.酥脆的&#xff0c;易碎的 2.sweet adj.甜的 比如說chocolate is so sweet and delicious 3.chewy adj.難嚼的&#xff0c;難咽的 4.oatmeal n.燕麥粉 5.pickle n.泡菜 7.stir-fry v.炒菜 8.bacon n.咸肉&#xff0c;熏肉 9.yummy adj.美味可口的 1…