Day53:圖論 島嶼數量 島嶼的最大面積

99. 島嶼數量

時間限制:1.000S??空間限制:256MB

題目描述

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

輸入描述

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

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

輸出描述

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

輸入示例
4 5
1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1
輸出示例
3
提示信息

根據測試案例中所展示,島嶼數量共有 3 個,所以輸出 3。

數據范圍:

1 <= N, M <= 50

思路:

注意題目中每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連接形成。

也就是說斜角度鏈接是不算了

本題思路,是用遇到一個沒有遍歷過的節點陸地,計數器就加一,然后把該節點陸地所能遍歷到的陸地都標記上。

在遇到標記過的陸地節點和海洋節點的時候直接跳過。 這樣計數器就是最終島嶼的數量。

dfs:

import java.util.*;class Main{public static void main(String[] args){int n,m;Scanner scanner = new Scanner(System.in);n=scanner.nextInt();m=scanner.nextInt();int[][] map=new int[n][m];for(int i=0;i<n;i++){for(int j=0;j<m;j++){map[i][j]=scanner.nextInt();}}int result=0;boolean[][] visited=new boolean[n][m];for(int i=0;i<n;i++){for( int j=0;j<m;j++){if((!visited[i][j])&&map[i][j]==1){result++;visited[i][j]=true;dfs(visited,map,i,j);}}}System.out.println(result);}public static void dfs(boolean[][] visited,int[][] map,int x,int y){int[][] dir={{0,1},{1,0},{-1,0},{0,-1}};for(int i=0;i<4;i++){int newx=x+dir[i][0];int newy=y+dir[i][1];if(newx>=0&&newx<map.length&&newy>=0&&newy<map[x].length&&!visited[newx][newy]&&map[newx][newy]==1){visited[newx][newy]=true;dfs(visited,map,newx,newy);}}}
}

BFS:

注意這里為了避免超時,加入隊列就標記為訪問過,避免結點的重復加入

import java.util.*;class Main{public static void main(String[] args){int n,m;Scanner scanner = new Scanner(System.in);n=scanner.nextInt();m=scanner.nextInt();int[][] map=new int[n][m];for(int i=0;i<n;i++){for(int j=0;j<m;j++){map[i][j]=scanner.nextInt();}}int result=0;boolean[][] visited=new boolean[n][m];for(int i=0;i<n;i++){for( int j=0;j<m;j++){if((!visited[i][j])&&map[i][j]==1){result++;visited[i][j]=true;bfs(visited,map,i,j);}}}System.out.println(result);}public static void bfs(boolean[][] visited, int[][] map, int x, int y) {int[][] dir = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};Queue<int[]> queue = new LinkedList();queue.offer(new int[]{x, y});visited[x][y] = true;while (!queue.isEmpty()) {int[] poll = queue.poll();int curx = poll[0];int cury = poll[1];for (int i=0;i<4;i++){int newx=curx+dir[i][0];int newy=cury+dir[i][1];if(newx>=0&&newx<map.length&&newy>=0&&newy<map[x].length&&!visited[newx][newy]&&map[newx][newy]==1){queue.add(new int[]{newx,newy});visited[newx][newy]=true;}}}}
}

100. 島嶼的最大面積

時間限制:1.000S??空間限制:256MB

題目描述

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

輸入描述

第一行包含兩個整數 N, M,表示矩陣的行數和列數。后續 N 行,每行包含 M 個數字,數字為 1 或者 0,表示島嶼的單元格。

輸出描述

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

輸入示例
4 5
1 1 0 0 0
1 1 0 0 0
0 0 1 0 0
0 0 0 1 1
輸出示例
4
提示信息

樣例輸入中,島嶼的最大面積為 4。

數據范圍:

1 <= M, N <= 50。

思路:本題與上題一樣,就是多了求每個島嶼面積的步驟

import java.util.*;class Main {public static void main(String[] args) {int n, m;Scanner scanner = new Scanner(System.in);n = scanner.nextInt();m = scanner.nextInt();int[][] map = new int[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {map[i][j] = scanner.nextInt();}}int result = 0;boolean[][] visited = new boolean[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if ((!visited[i][j]) && map[i][j] == 1) {visited[i][j] = true;int s=  dfs(visited, map, i, j);result=Math.max(result,s);}}}System.out.println(result);}public static int dfs(boolean[][] visited, int[][] map, int x, int y) {int[][] dir = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};int s=0;Queue<int[]> queue = new LinkedList();queue.offer(new int[]{x, y});s++;visited[x][y] = true;while (!queue.isEmpty()) {int[] poll = queue.poll();int curx = poll[0];int cury = poll[1];for (int i=0;i<4;i++){int newx=curx+dir[i][0];int newy=cury+dir[i][1];if(newx>=0&&newx<map.length&&newy>=0&&newy<map[x].length&&!visited[newx][newy]&&map[newx][newy]==1){queue.add(new int[]{newx,newy});s++;visited[newx][newy]=true;}}}
return s;}
}

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

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

相關文章

低空經濟持續發熱,無人機培訓考證就業市場及前景剖析

隨著科技的不斷進步和社會需求的日益增長&#xff0c;低空經濟已成為全球及我國經濟增長的新引擎。作為低空經濟的重要組成部分&#xff0c;無人機技術因其廣泛的應用領域和顯著的經濟效益&#xff0c;受到了社會各界的廣泛關注。為滿足市場對無人機人才的需求&#xff0c;無人…

深入剖析 Android 開源庫 EventBus 的源碼詳解

文章目錄 前言一、EventBus 簡介EventBus 三要素EventBus 線程模型 二、EventBus 使用1.添加依賴2.EventBus 基本使用2.1 定義事件類2.2 注冊 EventBus2.3 EventBus 發起通知 三、EventBus 源碼詳解1.Subscribe 注解2.注冊事件訂閱方法2.1 EventBus 實例2.2 EventBus 注冊2.2.1…

夢想CAD在線預覽編輯功能

1.最近有個需求&#xff0c;在web系統里進行在線進行CAD預覽和編輯&#xff0c;這里用的是夢想CAD實現此功能&#xff0c;夢想CAD官網文檔 2.CAD預覽&#xff0c;需要需要對CAD文件格式進行轉化&#xff0c;將dwg文件格式轉化為mxweb格式&#xff0c;再進行調用夢想CAD里的打開…

ipynb轉換為pdf、Markdown(.md)

Jupyter Notebook 文件&#xff08;.ipynb&#xff09;可以轉換成多種數據格式&#xff0c;以適應不同的使用場景和需求。以下是幾種常見的轉換格式及其簡潔描述&#xff1a; HTML: Jupyter Notebook可以直接導出為靜態的網頁&#xff08;HTML&#xff09;格式&#xff0c;這樣…

記一次IP數據處理過程,文本(CSV文件)處理,IP解析

個人博客&#xff1a;無奈何楊&#xff08;wnhyang&#xff09; 個人語雀&#xff1a;wnhyang 共享語雀&#xff1a;在線知識共享 Github&#xff1a;wnhyang - Overview 起因 突然接收到XX給的任務&#xff0c;要將一批IP數據處理一下&#xff0c;將IP對應的省市區解析出來…

PHP基礎語法

PHP 腳本在服務器上執行&#xff0c;然后將純 HTML 結果發送回瀏覽器。 基本的 PHP 語法 PHP 腳本可以放在文檔中的任何位置。 PHP 腳本以 <?php 開始&#xff0c;以 ?> 結束&#xff1a; <?php // PHP 代碼 ?> PHP 文件的默認文件擴展名是 .php。 PHP 文…

PHP智云物業管理平臺微信小程序系統源碼

?&#x1f3e0;智云物業管理新紀元&#xff01;微信小程序&#xff0c;讓家園管理更智慧&#x1f4f1; &#x1f3e1;【開篇&#xff1a;智慧生活&#xff0c;從物業開始】&#x1f3e1; 在快節奏的現代生活中&#xff0c;我們追求的不僅僅是家的溫馨&#xff0c;更是生活的…

基于hive數據庫的泰坦尼克號幸存者數據分析

進入 ./beeline -u jdbc:hive2://node2:10000 -n root -p 查詢 SHOW TABLES; 刪除 DROP TABLE IF EXISTS tidanic; 上傳數據 hdfs dfs -put train.csv /user/hive/warehouse/mytrain.db/tidanic 《泰坦尼克號幸存者數據分析》 1、原始數據介紹 泰坦尼克號是當時世界上…

達夢數據庫系列—28. 主備集群高可用測試

目錄 監視器關閉 監視器啟動&#xff0c;Detach備庫 主備正常&#xff0c;手動switchover 主庫故障&#xff0c;自動switchover 主庫故障&#xff0c;手動Takeover 主庫故障&#xff0c;備庫強制takeover 主庫重啟 備庫故障 公網連接異常 主庫私網異常 備庫私網異常…

實現給Nginx的指定網站開啟basic認證——http基本認證

一、問題描述 目前我們配置的網站內容都是沒有限制&#xff0c;可以讓任何人打開瀏覽器都能夠訪問&#xff0c;這樣就會存在一個問題&#xff08;可能會存在一些惡意訪問的用戶進行惡意操作&#xff0c;直接訪問到我們的敏感后臺路徑進行操作&#xff0c;風險就會很大&#xff…

云原生周刊:Score 成為 CNCF 沙箱項目|2024.7.15

開源項目 Trident Trident 是由 NetApp 維護的全面支持的開源項目。它從頭開始設計&#xff0c;旨在通過行業標準接口&#xff08;如容器存儲接口 CSI&#xff09;幫助您滿足容器化應用程序對持久性存儲的需求。 Monokle Monokle 通過提供用于編寫 YAML 清單、驗證策略和管…

淺談微服務

技術方法論&#xff1a;向微服務邁進&#xff1a; 理論&#xff1a;“軟件研發中任何一項技術、方法、架構都不可能是銀彈"—Fred Brooks 哪些場景適合用微服務&#xff0c;呢些不適用&#xff1f;&#xff08;微服務存在哪些理解誤區、應用前提&#xff09; 一些被驗證過…

Why can‘t I access GPT-4 models via API, although GPT-3.5 models work?

題意&#xff1a;為什么我無法通過API訪問GPT-4模型&#xff0c;盡管GPT-3.5模型可以工作&#xff1f; 問題背景&#xff1a; Im able to use the gpt-3.5-turbo-0301 model to access the ChatGPT API, but not any of the gpt-4 models. Here is the code I am using to tes…

【雷豐陽-谷粒商城 】【分布式高級篇-微服務架構篇】【22】【RabbitMQ】

持續學習&持續更新中… 守破離 【雷豐陽-谷粒商城 】【分布式高級篇-微服務架構篇】【22】【RabbitMQ】 Message Queue 消息隊列異步處理應用解耦流量控制 消息中間件概念RabbitMQ概念MessagePublisherExchangeQueueBindingConnectionChannelConsumerVirtual HostBroker圖…

Django prefetch_related()方法

prefetch_related的作用 prefetch_related()是 Django ORM 中用于優化查詢性能的另一個重要方法&#xff0c;尤其在處理多對多&#xff08;ManyToMany&#xff09;關系和反向關系時非常有用。它允許你預加載相關對象&#xff0c;從而減少數據庫查詢次數。 1&#xff0c;創建應…

【香橙派】Orange pi AIpro開發板使用之一鍵部署springboot項目

前言 最近有幸收到一份新款 OrangePi AIpro 開發板&#xff0c;之前手里也搗鼓過一些板子&#xff0c;這次嘗試從零開始部署一個簡單的后端服務。OrangePi AIpro 采用昇騰AI技術路線&#xff0c;具體為4核64位處理器AI處理器&#xff0c;可配16GB內存容量&#xff0c;各種復雜應…

數字化賦能,加油小程序讓出行更便捷高效

在快節奏的現代生活中&#xff0c;每一次加油不僅是車輛續航的必要步驟&#xff0c;也成為了人們日常生活中不可或缺的一環。隨著科技的飛速發展&#xff0c;傳統加油模式正逐步向智能化、便捷化轉型&#xff0c;其中&#xff0c;加油小程序作為這股浪潮中的佼佼者&#xff0c;…

el-date-picker手動輸入日期,通過設置開始時間和階段自動填寫結束時間

需求&#xff1a;根據開始時間&#xff0c;通過填寫階段時長&#xff0c;自動填寫結束時間&#xff0c;同時開始時間和節數時間可以手動輸入 代碼如下&#xff1a; <el-form ref"ruleForm2" :rules"rules2" :model"formData" inline label-po…

B樹與B+樹的區別

B樹和B樹都是用于數據庫和文件系統的平衡樹數據結構&#xff0c;但它們有一些顯著的區別&#xff1a; 節點結構&#xff1a; B樹&#xff1a;每個節點存儲數據和指向子節點的指針。葉子節點也包含數據。 B樹&#xff1a;內部節點只存儲索引值&#xff0c;不存儲實際數據。所有…

yolov5 上手

0 介紹 YOLO(You Only Look Once)是一種流行的物體檢測和圖像分割模型&#xff0c;由華盛頓大學的約瑟夫-雷德蒙&#xff08;Joseph Redmon&#xff09;和阿里-法哈迪&#xff08;Ali Farhadi&#xff09;開發。YOLO 于 2015 年推出&#xff0c;因其高速度和高精確度而迅速受到…