代碼隨想錄第51天|島嶼數量(深搜)、島嶼數量(廣搜)、島嶼的最大面積

1.島嶼數量(深搜)?---》模板題

版本一寫法:下一個節點是否能合法已經判斷完了,傳進dfs函數的就是合法節點。

#include <iostream>
#include <vector>
using namespace std;int dir[4][2] = {0, 1, 1, 0, -1, 0, 0, -1}; // 四個方向
void dfs(const vector<vector<int> > &grid, vector<vector<bool> > &visited, int x,int y) {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; // 越界了,直接跳過if (!visited[nextx][nexty] &&grid[nextx][nexty] == 1){ // 沒有訪問過的 同時 是陸地的visited[nextx][nexty] = true;dfs(grid, visited, nextx, nexty);}}
}int main() {int n, m;cin >> n >> m;vector<vector<int> > grid(n, vector<int>(m, 0));for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {cin >> grid[i][j];}}vector<vector<bool> > visited(n, vector<bool>(m, false));int result = 0;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (!visited[i][j] && grid[i][j] == 1) {visited[i][j] = true;result++;                 // 遇到沒訪問過的陸地,+1dfs(grid, visited, i, j); // 將與其鏈接的陸地都標記上 true}}}cout << result << endl;
}

版本二:不管節點是否合法,上來就dfs,然后在終止條件的地方進行判斷,不合法再retur

void dfs(const vector<vector<int>> &grid, vector<vector<bool>> &visited, int x, int y)
{if(visited[x][y]||grid[x][y]==0)return;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(grid, visited, nextx, nexty);}
}int main()
{...vector<vector<bool>> visited(n, vector<bool>(m, false));int result = 0;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){if (!visited[i][j] && grid[i][j] == 1){result++;                 // 遇到沒訪問過的陸地,+1dfs(grid, visited, i, j); // 將與其鏈接的陸地都標記上 true}}}cout << result << endl;
}

但是版本一比版本二要高效,避免了無用的遞歸。

2.島嶼數量(廣搜)

只要 加入隊列就代表 走過,就需要標記,而不是從隊列拿出來的時候再去標記走過.

#include <iostream>
#include <vector>
#include <queue>
using namespace std;int dir[4][2] = {0, 1, 1, 0, -1, 0, 0, -1}; // 四個方向
void bfs(const vector<vector<int>> &grid, vector<vector<bool>> &visited, int x, int y)
{queue<pair<int, int>> que;que.push({x, y});visited[x][y] = true;while(!que.empty()){pair<int,int>cur = que.front();que.pop();int curx = cur.first;int cury = cur.second;for(int i = 0; i < 4; i++){int nextx = curx + dir[i][0];int nexty = cury + dir[i][1];if(nextx < 0 || nextx >= grid.size() || nexty < 0 || nexty >= grid[0].size()) continue;if(!visited[nextx][nexty]&&grid[nextx][nexty]==1){que.push({nextx, nexty});visited[nextx][nexty] = true;}}}
}int main()
{int n, m;cin >> n >> m;vector<vector<int>> grid(n, vector<int>(m, 0));for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){cin >> grid[i][j];}}vector<vector<bool>> visited(n, vector<bool>(m, false));int result = 0;for (int i = 0; i < n; i++){for (int j = 0; j < m; j++){if (!visited[i][j] && grid[i][j] == 1){result++;                 // 遇到沒訪問過的陸地,+1bfs(grid, visited, i, j); // 將與其鏈接的陸地都標記上 true}}}cout << result << endl;
}

3.島嶼的最大面積

#include <iostream>
#include <vector>
using namespace std;int count = 0;
int dir[4][2] = {0, 1, 1, 0, -1, 0, 0, -1};
void dfs(vector<vector<int>> &grid, vector<vector<bool>> &visited, int x,int y) {for (int i = 0; i < 4; i++) {int nextx = x + dir[i][0];int nexty = y + dir[i][1];if (nextx < 0 || nexty < 0 || nextx >= grid.size() ||nexty >= grid[0].size()) {continue;}if(!visited[nextx][nexty]&&grid[nextx][nexty]==1){visited[nextx][nexty] = true;count++;dfs(grid,visited,nextx,nexty);}}
}int main(void) {int n, m;cin >> n >> m;vector<vector<int>> grid(n, vector<int>(m, 0));for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {cin >> grid[i][j];}}vector<vector<bool>> visited(n, vector<bool>(m, false));int result = 0;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (!visited[i][j] && grid[i][j] == 1) {visited[i][j] = true;count=1;//重置dfs(grid, visited, i, j);result = max(result, count);}}}cout<<result<<endl;return 0;
}

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

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

相關文章

Made with Unity | 從影視到游戲:《魷魚游戲》IP 的邊界拓展

優質IP的跨媒體開發潛力不可限量。以現象級劇集《魷魚游戲》為例&#xff0c;Netflix旗下游戲工作室Boss Fight在第二季開播前夕推出的手游《Squid Game: Unleashed》&#xff0c;一經發布便橫掃全球107個國家和地區的App Store免費游戲榜首。 這款多人派對大逃殺游戲完美還原…

allure 報告更改標題和語言為中文

在網上看到好多談到更改allure 的標題設置都很麻煩&#xff0c;去更改JSON文件 其實可以有更簡單的辦法&#xff0c;就是在生成報表時增加參數 使用allure --help 查看&#xff1a; --lang, --report-language 設置報告的語言&#xff0c;默認是應用 The report language. …

HGDB索引膨脹的檢查與處理思路

文章目錄 環境文檔用途詳細信息 環境 系統平臺&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;4.5.8 文檔用途 本文檔主要介紹HGDB索引膨脹的定義、產生的原因、如何檢查以及遇到索引膨脹如何處理&#xff08;包括預防和解決&#xff09; 詳細信息 …

【Python CGI編程】

Python CGI&#xff08;通用網關接口&#xff09;編程是早期Web開發中實現動態網頁的技術方案。以下是系統化指南&#xff0c;包含核心概念、實現步驟及安全實踐&#xff1a; 一、CGI 基礎概念 1. 工作原理 瀏覽器請求 → Web服務器&#xff08;如Apache&#xff09; → 執行…

數據庫故障排查指南:從入門到精通

1. 常見數據庫故障類型 1.1 連接故障 數據庫連接超時連接池耗盡網絡連接中斷認證失敗1.2 性能故障 查詢執行緩慢內存使用過高CPU使用率異常磁盤I/O瓶頸1.3 數據故障 數據不一致數據丟失數據損壞事務失敗2. 故障排查流程 2.1 初步診斷 -- 檢查數據庫狀態SHOW STATUS;SHOW PRO…

conda創建環境常用命令(個人用)

創建環境 conda create --name your_project_name創建環境 ---- 指定環境python版本 conda create --name your_project_name python3.x環境列表 conda env list激活環境 conda activate your_project_name退出環境 conda deactivate環境列表 #使用conda命令 conda list …

PCL 繪制二次曲面

文章目錄 一、簡介二、實現代碼三、實現效果一、簡介 這里基于二次曲面的公式: z = a 0 + a 1 x + a 2 y + a

一文講透面向對象編程OOP特點及應用場景

面向對象編程&#xff08;Object-Oriented Programming, OOP&#xff09;是一種以對象為核心、通過類組織代碼的編程范式。它通過模擬現實世界的實體和交互來構建軟件系統&#xff0c;是現代軟件開發中最廣泛使用的范式之一。以下是 OOP 的全面解析&#xff1a; 一、OOP 的四大…

linux,我啟動一個springboot項目, 用java -jar xxx.jar ,但是沒多久這個java進程就會自動關掉

當使用 java -jar xxx.jar & 啟動 Spring Boot 項目后進程自動關閉時&#xff0c;可能由多種原因導致。以下是常見排查步驟和解決方案&#xff1a; 一、查看日志定位原因 進程異常關閉通常會在控制臺或日志中留下線索&#xff0c;建議先獲取完整日志&#xff1a; 1. 查看…

【獨家精簡】win11(24h2)清爽加速版

自作該版本的初心&#xff1a;隨著電腦性能的不斷提升&#xff0c;我們需要的更多的是沒有廣告&#xff0c;沒有推薦&#xff0c;沒有收集隱私的windows清爽版純凈系統 目前只會去制作windows系統專業版 1、去除Windows系統自帶的廣告新聞和推薦以及小組間和聊天功能。 2、精簡…

大二java第一面小廠(掛)

第一場&#xff1a; mybatis怎么防止數據轉義。 Hutool用的那些你常用的方法。 springboot的常用注解。 redis的多級緩存。 websocket怎么實現的多人協作編輯功能。 怎么實現的分庫分表。 mysql里面的各種操作&#xff0c;比如說分表怎么分&#xff0c;分頁查詢怎么用。 mybat…

OceanBase 的系統變量、配置項和用戶變量有何差異

在繼續閱讀本文之前&#xff0c;大家不妨先思考一下&#xff0c;數據庫中“系統變量”、“用戶變量”以及“配置項”這三者之間有何不同。如果感到有些模糊&#xff0c;那么本文將是您理清這些概念的好幫手。 很多用戶在使用OceanBase數據庫中的“配置項”和“系統變量”&#…

HTML-3.3 表格布局(學校官網簡易布局實例)

本系列可作為前端學習系列的筆記&#xff0c;代碼的運行環境是在HBuilder中&#xff0c;小編會將代碼復制下來&#xff0c;大家復制下來就可以練習了&#xff0c;方便大家學習。 系列文章目錄 HTML-1.1 文本字體樣式-字體設置、分割線、段落標簽、段內回車以及特殊符號 HTML…

如何在Edge瀏覽器里-安裝夢精靈AI提示詞管理工具

方案一&#xff08;應用中心安裝-推薦&#xff09;&#xff1a; 夢精靈 跨平臺AI提示詞管理工具 - Microsoft Edge AddonsMake Microsoft Edge your own with extensions that help you personalize the browser and be more productive.https://microsoftedge.microsoft.com…

GpuGeek 網絡加速:破解 AI 開發中的 “最后一公里” 瓶頸

摘要&#xff1a; 網絡延遲在AI開發中常被忽視&#xff0c;卻嚴重影響效率。GpuGeek通過技術創新&#xff0c;提供學術資源訪問和跨國數據交互的加速服務&#xff0c;助力開發者突破瓶頸。 目錄 一、引言&#xff1a;當算力不再稀缺&#xff0c;網絡瓶頸如何破局&#xff1f; …

校園社區小程序源碼解析

基于ThinkPHP、FastAdmin和UniApp開發的校園社區小程序源碼&#xff0c;旨在為校園內的學生和教職員工提供一個便捷的在線交流和服務平臺。 該小程序前端采用UniApp進行開發&#xff0c;具有良好的跨平臺兼容性&#xff0c;可以輕松發布到iOS和Android平臺。同時&#xff0c;后…

【Elasticsearch】flattened`類型在查詢嵌套數組時可能返回不準確結果的情況

好的&#xff01;為了更清楚地說明flattened類型在查詢嵌套數組時可能返回不準確結果的情況&#xff0c;我們可以通過一個具體的例子來展示。這個例子將展示如何在文檔中沒有完全匹配的嵌套對象時&#xff0c;flattened類型仍然可能返回該文檔。 示例文檔結構 假設你有以下文…

【目標檢測】RT-DETR

DETRs Beat YOLOs on Real-time Object Detection DETR在實時目標檢測任務中超越YOLO CVPR 2024 代碼地址 論文地址 0.論文摘要 YOLO系列因其在速度與精度間的均衡權衡&#xff0c;已成為實時目標檢測領域最受歡迎的框架。然而我們觀察到&#xff0c;非極大值抑制&#xf…

筆試強訓:Day5

一、笨小猴&#xff08;哈希數學&#xff09; 笨小猴_牛客題霸_牛客網 #include <iostream> #include <cmath> using namespace std; string s; bool isprime(int x){//試除法if(x2) return true;if(x<2||x%20) return false;int nsqrt(x);for(int i3;i<n;i…

掌握 LangChain 文檔處理核心:Document Loaders 與 Text Splitters 全解析

&#x1f407;明明跟你說過&#xff1a;個人主頁 &#x1f3c5;個人專欄&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目錄 一、引言 1、什么是LangChain 2、LangChain 在智能應用中的作用 …