代碼隨想錄|圖論|05島嶼數量(深搜DFS)

leetcode:99. 島嶼數量

題目

題目描述:

給定一個由 1(陸地)和 0(水)組成的矩陣,你需要計算島嶼的數量。島嶼由水平方向或垂直方向上相鄰的陸地連接而成,并且四周都是水域。你可以假設矩陣外均被水包圍。

輸入描述:

第一行包含兩個整數 N, M,表示矩陣的行數和列數。

后續 N 行,每行包含 M 個數字,數字為 1 或者 0。

輸出描述:

輸出一個整數,表示島嶼的數量。如果不存在島嶼,則輸出 0。

思路

遇到一個沒有遍歷過的節點陸地,計數器就加一,然后把該節點陸地所能遍歷到的陸地都標記上(這一步就是為了防止重復計算!)。

在遇到標記過的陸地節點和海洋節點的時候直接跳過.

計數器就是最終島嶼的數量。

下面代碼詳細注釋:

#include <bits/stdc++.h>
using namespace std;// 定義4個方向
int dir[4][2] = {1, 0, 0, -1, -1, 0, 0, 1};void dfs(vector<vector<int>> &grid, vector<vector<bool>> &visited, int x, int y)
{// 終止條件:如果遇到海水或者已經遍歷過的島嶼就停下來if (grid[x][y] == 0 || visited[x][y]){return;}// 處理當前節點:當前到了(x,y)這個點,首先就把它標記上visited[x][y] = true;// 當前節點往下延伸,看它四周的點for (int i = 0; i < 4; i++){int nextx = x + dir[i][0];int nexty = y + dir[i][1];// 基本限制條件:下一個點肯定不能跑到整個大矩陣的外面去if (nextx < 0 || nextx >= grid.size() || nexty < 0 || nexty >= grid[0].size())continue;// 遞歸:這里遞歸不需要任何條件,因為一進入dfs就會有終止條件來判斷dfs(grid, visited, nextx, nexty);}
}int main()
{int n, m;cin >> n >> m;vector<vector<int>> grid(n, vector<int>(m, 0));vector<vector<bool>> visited(n, vector<bool>(m, false));for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){cin >> grid[i][j];}}// count最終島嶼計數int count = 0;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){// 一個一個陸地開始找,不要覺得麻煩,因為有的陸地已經被標記了,就會直接跳過if (grid[i][j] == 1 && !visited[i][j]){count++;dfs(grid, visited, i, j);}}}cout << count << endl;return 0;
}

一定要清楚dfs在這里的作用:

對(x,y)周圍的島嶼進行標記!?

總結

我這里寫的是dfs的第二個模板,第一個模版因為沒有終止條件,所以寫起來感覺很奇怪,我就沒有放,感興趣去看隨想錄。

參考資料

代碼隨想錄?

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

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

相關文章

數據結構-第二節-堆棧與隊列

一、概念&#xff1a; 堆棧與隊列也是線性表&#xff0c;但是&#xff1a; 堆棧&#xff1a;只能在一個端進行插入刪除&#xff0c;此端稱為棧頂。&#xff08;特點&#xff1a;后來居上&#xff09; 隊列&#xff1a;在一端進行插入&#xff08;隊尾&#xff09;&#xff0…

HarmonyNext動畫大全02-顯式動畫

HarmonyOS NEXT顯式動畫詳解 1. 核心接口 顯式動畫通過animateTo接口實現&#xff0c;主要特點包括&#xff1a; 觸發方式&#xff1a;需主動調用接口觸發動畫 參數配置 &#xff1a; animateTo({duration: 1000, // 動畫時長(ms)curve: Curve.Ease, // 動畫曲線delay: 200…

芯谷科技--高壓降壓型 DC-DC 轉換器D7005

在當今電子設備日益復雜且對電源性能要求極高的背景下&#xff0c;一款高效、穩定的電源管理芯片至關重要。 D7005憑借其卓越的性能和廣泛的應用適配性&#xff0c;成為眾多工程師在設計電源方案時的優選。 產品簡介 D7005 是一款高效、高壓降壓型 DC-DC 轉換器&#xff0c;具…

MySQL的GTID詳解

GTID&#xff08;Global Transaction Identifier&#xff0c;全局事務標識符&#xff09;是MySQL 5.6及以上版本引入的重要特性&#xff0c;用于在主從復制環境中唯一標識每個事務&#xff0c;簡化復制管理、故障轉移和數據一致性維護。以下從多維度詳細介紹GTID&#xff1a; …

專題:2025中國游戲科技發展研究報告|附130+份報告PDF、原數據表匯總下載

原文鏈接&#xff1a;https://tecdat.cn/?p42756 本報告匯總解讀基于艾瑞咨詢《2025中國游戲科技發展白皮書》、伽馬數據《2025年1-3月中國游戲產業季度報告》、嘉世咨詢《2025中國單機游戲市場現狀報告》等多份行業研報數據。當《黑神話&#xff1a;悟空》以虛幻引擎5復刻東…

【數據挖掘】數據挖掘綜合案例—銀行精準營銷

要求&#xff1a; 1、根據相關的信息預測通過電話推銷&#xff0c;用戶是否會在銀行進行存款 2、數據bank.csv&#xff0c;約4520條數據&#xff0c;17個屬性值 提示&#xff1a; 17個屬性&#xff0c;分別是年齡&#xff0c;工作類型&#xff0c;婚姻狀況&#xff0c;受教育…

postgresql查看鎖的sql語句

發現一個查看postgresql鎖比較好的sql語句&#xff0c;參考鏈接地址如下 鏈接地址 查看鎖等待sql witht_wait as(select a.mode,a.locktype,a.database,a.relation,a.page,a.tuple,a.classid,a.granted,a.objid,a.objsubid,a.pid,a.virtualtransaction,a.virtualxid,a.trans…

JSON 格式詳解

JSON 格式詳解 隨著互聯網的發展和各種 Web 應用程序的普及&#xff0c;數據交換已經成為了我們日常開發中的重要環節。而在各種數據交換格式中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作為一種輕量級的數據交換格式&#xff0c;以其簡潔、易于閱…

原型設計Axure RP網盤資源下載與安裝教程共享

對于初學者來說&#xff0c;我們熟悉一下其定義&#xff1a;?Axure RP是一款常用的快速原型設計工具?&#xff0c;主要用于創建應用軟件或Web網站的線框圖、流程圖、原型和規格說明文檔&#xff0c;廣泛應用于產品經理、UI/UX設計師等專業領域。?? 主要用戶群體&#xff1…

iframe嵌套 redirect中轉頁面 route跳轉

需求是項目A要使用iframe內嵌項目B的頁面&#xff0c; 由于需要嵌套的頁面很多&#xff0c;每個頁面路徑和參數又各不相同&#xff0c; 所以我們在項目B里做了一個中轉頁面&#xff0c;這樣就能自己掌控項目A傳遞過來的東西了&#xff1b; routes.js 增加一個菜單&#xff1a;…

IP數據報 封裝成 MAC幀 ( 目的MAC地址6B 源MAC地址6B 類型2B 數據部分 FCS校驗和4B )

將 IP 數據報&#xff08;Internet Protocol Datagram&#xff09;封裝成 MAC 幀 需要在數據鏈路層添加適當的頭部信息&#xff0c;以便在局域網內進行傳輸。這個過程涉及將網絡層&#xff08;IP 層&#xff09;的數據通過數據鏈路層&#xff08;MAC 層&#xff09;封裝成適合物…

Note2.4 機器學習:Batch Normalization Introduction

Batch Normalization&#xff08;批標準化&#xff0c;BN&#xff09;通過標準化數據的操作&#xff0c;使得損失函數的優化地形&#xff08;optimization landscape&#xff09;更加平滑&#xff0c;從而達到更好地訓練效果。BN常用于卷積神經網絡&#xff08;CNN&#xff09;…

IDEA在AI時代的智能編程實踐:從工蜂到通義靈碼的效能躍遷??

引言? 在騰訊云工作期間&#xff0c;我曾使用?工蜂的AI代碼補全功能&#xff0c;結合IntelliJ IDEA&#xff08;以下簡稱IDEA&#xff09;極大提升了開發效率。如今離開騰訊云&#xff0c;面對外部開發環境&#xff0c;如何繼續利用AI提升編碼效率&#xff1f;本文將系統梳理…

MySQL 慢查詢日志詳解

慢查詢日志&#xff08;Slow Query Log&#xff09;是 MySQL 提供的一種核心性能優化工具&#xff0c;用于記錄執行時間超過指定閾值的 SQL 語句。通過分析這些日志&#xff0c;可以定位數據庫性能瓶頸&#xff0c;優化低效查詢&#xff0c;提升系統整體效率。 一、慢查詢日志的…

UV安裝Python指南總結

UV安裝Python指南總結 UV是一個Python包管理工具,它可以幫助我們安裝和管理Python版本。以下是關于UV安裝Python的主要功能和用法總結。 基本使用 安裝最新版Python uv python install注意&#xff1a;UV使用Astral的python-build-standalone項目提供的Python發行版,而不是…

運維基礎-MYSQL數據庫-筆記

序 欠10年前自己的一份筆記&#xff0c;獻給今后的自己。 數據庫介紹 數據的時代 涉及的數據量大數據不隨程序的結束而消失數據被多個應用程序共享大數據 數據庫的發展史 萌芽階段&#xff1a;文件系統 使用磁盤文件來存儲數據初級階段&#xff1a;第一代數據庫 出現了網狀…

從GPTs到Real智能體:目前常見的幾種創建智能體方式

文章目錄 智能體的三個發展階段低階智能體(面向過程) VS 高階智能體(面向目標)主流智能體創建平臺實踐基礎型平臺cherry-studio豆包訊飛星火騰訊元器 高階智能體開發體系cline開發套件Coze平臺Dify開源框架Manus突破性方案 技術演進趨勢總結 智能體的三個發展階段 當前智能體技…

WPF 實現自定義數字輸入彈窗

1.前端代碼實現 <Grid><Grid.RowDefinitions><RowDefinition Height"100" /><RowDefinition Height"*" /></Grid.RowDefinitions><BorderGrid.Row"0"BorderBrush"WhiteSmoke"BorderThickness"0…

基于yolo海洋垃圾物品識別系統flask

查看完整項目包點擊文末名片 項目簡介 本項目 基于YOLO的海洋垃圾物品識別系統 旨在利用深度學習中的YOLO&#xff08;You Only Look Once&#xff09;模型&#xff0c;實現對海洋垃圾的自動識別與分類。通過構建一個基于Flask的Web應用&#xff0c;用戶可以方便地上傳圖片&…

從數據到決策:UI前端如何利用數字孿生技術提升管理效率?

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在數字化轉型的深水區&#xff0c;企業管理者正面臨數據過載與決策滯后的雙重挑戰 ——IDC 研…