KamaCoder 100. 岛屿的最大面积 + Leetcode 695. Max Area of Island

题目描述

给定一个由 1(陆地)和 0(水)组成的矩阵,计算岛屿的最大面积。岛屿面积的计算方式为组成岛屿的陆地的总数。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。

输入描述

第一行包含两个整数 N, M,表示矩阵的行数和列数。后续 N 行,每行包含 M 个数字,数字为 1 或者 0,表示岛屿的单元格。

输出描述

输出一个整数,表示岛屿的最大面积。如果不存在岛屿,则输出 0。

输入示例

思路

之前是统计岛屿的数量,现在是搜索每个岛屿上“1”的数量,然后取一个最大值。

C++深度优先搜索
#include <iostream>
#include <vector>
using namespace std;
int count;
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) {if (visited[x][y] || grid[x][y] == 0) return;visited[x][y] = true;count++;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() {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 = vector<vector<bool>>(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) {count = 0;dfs(grid, visited, i, j);result = max(result, count);}}}cout << result << endl;
}

C++广度优先搜索

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int count;
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;count++;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) {for (int j = 0; j < 4; ++j) {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) {count++;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 = vector<vector<bool>>(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) {count = 0;bfs(grid, visited, i, j);result = max(result, count);}}}cout << result << endl;
}

Python深度优先搜索

dir = [(0, 1), (1, 0), (0, -1), (-1, 0)]def dfs(grid, visited, x, y):global countif (visited[x][y] == True or grid[x][y] == 0): returnvisited[x][y] = Truecount += 1# print(x, y, count)for dx, dy in dir:nextx, nexty = x + dx, y + dyif nextx < 0 or nextx >= len(grid) or nexty < 0 or nexty >= len(grid[0]):continueif grid[nextx][nexty] == 1 and not visited[nextx][nexty]:dfs(grid, visited, nextx, nexty)def main():n, m = map(int, input().split())grid = [list(map(int, input().split())) for _ in range(n)]visited = [[False] * (m) for _ in range(n)]global countresult = 0for i in range(n):for j in range(m):if (grid[i][j] == 1 and not visited[i][j]):count = 0dfs(grid, visited, i, j)result = max(result, count)print(result)if __name__ == "__main__":main()

Python广度优先搜索

from collections import deque
dir = [(0, 1), (1, 0), (0, -1), (-1, 0)]def bfs(grid, visited, x, y):global countque = deque([(x, y)])visited[x][y] = Truecount += 1while(que):curx, cury = que.popleft()# print(curx, cury, count)for dx, dy in dir:nextx, nexty = curx + dx, cury + dyif nextx < 0 or nextx >= len(grid) or nexty < 0 or nexty >= len(grid[0]):continueif grid[nextx][nexty] == 1 and not visited[nextx][nexty]:count += 1que.append((nextx, nexty))visited[nextx][nexty] = Truedef main():n, m = map(int, input().split())grid = [list(map(int, input().split())) for _ in range(n)]visited = [[False] * (m) for _ in range(n)]global countresult = 0for i in range(n):for j in range(m):if (grid[i][j] == 1 and not visited[i][j]):count = 0bfs(grid, visited, i, j)result = max(result, count)print(result)if __name__ == "__main__":main()

Leetcode 695. Max Area of Island

代码

Python广度优先搜索
from collections import deque
class Solution:def bfs(self, grid, visited, x, y):dir = [(0, 1), (1, 0), (0, -1), (-1, 0)]global countque = deque([(x, y)])visited[x][y] = Truecount += 1while(que):curx, cury = que.popleft()# print(curx, cury, count)for dx, dy in dir:nextx, nexty = curx + dx, cury + dyif nextx < 0 or nextx >= len(grid) or nexty < 0 or nexty >= len(grid[0]):continueif grid[nextx][nexty] == 1 and not visited[nextx][nexty]:count += 1que.append((nextx, nexty))visited[nextx][nexty] = Truedef maxAreaOfIsland(self, grid: List[List[int]]) -> int:n, m = len(grid), len(grid[0])visited = [[False] * (m) for _ in range(n)]global countresult = 0for i in range(n):for j in range(m):if (grid[i][j] == 1 and not visited[i][j]):count = 0self.bfs(grid, visited, i, j)result = max(result, count)return result
C++深度优先搜索
class Solution {
public:int count;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) {if (visited[x][y] || grid[x][y] == 0) return;visited[x][y] = true;count++;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 maxAreaOfIsland(vector<vector<int>>& grid) {int n = grid.size();int m = grid[0].size();vector<vector<bool>> visited = vector<vector<bool>>(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) {count = 0;dfs(grid, visited, i, j);result = max(result, count);}}}return result;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

XYCTF2024 WP

Pwn&#xff1a; hello_world(签到)&#xff1a; 这里的printf没有格式化字符串漏洞&#xff0c;但是我们依旧可以填充栈来利用printf泄露栈上信息 根据我们能填充的字节数来看&#xff0c;我们无法泄露出libc_start_main128的地址&#xff0c;但是可以泄露libc_start_call_m…

一款免费且功能强大的硬件检测工具,绿色小巧免安装!

HWiNFO是一款免费功能强大且广泛使用的硬件信息检测和监控工具&#xff0c;适用于Windows系统。它能够提供详细的硬件信息&#xff0c;包括CPU、主板、内存、硬盘、显卡等组件的详细规格和性能数据。此外&#xff0c;HWiNFO还支持实时监控硬件状态&#xff0c;如温度、电压和风…

计算机的错误计算(四十六)

摘要 再谈浮点运算的不确定性。 计算机的错误计算&#xff08;十&#xff09;、&#xff08;十一&#xff09;以及&#xff08;三&#xff09;探讨了浮点数的表示误差与浮点运算的一些性质。 下面再谈浮点运算的不确定性。 1. 确保两台不同机器上得到完全相同的浮点运算结果是…

042—pandas 数据透视并指定列的排序

数据透视和对列的重新排序是数据分析和报告过程中常用的工具和技术。它们可以帮助你更好地理解和分析数据,从而支持决策和洞察力的发现。透视和重新排序数据可以为数据可视化提供更好的输入。通过对数据进行透视,你可以将数据重新排列成适合绘图的形式,以更清晰地展示趋势、…

【React Hooks原理 - useTransition】

概述 在上一篇中我们介绍了useDeferredValue的基本原理&#xff0c;本文主要介绍一下useTransition这个Hook&#xff0c;之所以在这里提到useDeferredValue&#xff0c;是因为这两个Hook都是在React18引入的进行渲染优化的Hooks&#xff0c;在某些功能上是重叠的&#xff0c;主…

面试面到自闭,字节软件测试岗五轮面试,四个小时灵魂拷问...

准备过程 我自己是本科毕业后在老东家干了两年多&#xff0c;老东家算是一家”小公司”(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身)&#xff0c;毕业这两年多我也没有在大厂待过&#xff0c;因此找坑的时候是非常非常虚的。迫于心慌&#xff0c;我好好思考了一阵来…

<设计模式> 工厂模式

工厂模式 模式介绍&#xff1a;将对象的创建过程封装在工厂类中&#xff0c;客户端代码只需要关心从工厂获取对象的过程&#xff0c;而不需要了解对象的创建细节。这样做的好处包括提高了代码的灵活性和可扩展性&#xff0c;降低了对象之间的耦合度。主要解决接口选择的问题。…

Android 性能优化(二):LeakCanary【用于分析代码是否存在内存泄漏】程序无响应

目录 1&#xff09;内存相关的五种常见问题 2&#xff09;内存溢出和内存泄漏 3&#xff09;LeakCanary是什么? 4&#xff09;LeakCanary如何使用&#xff0c;如何分析&#xff1f; 5&#xff09;LeakCanary监测的内容 提问&#xff1a;程序有时候很卡&#xff0c;经常会出现…

前端开发:Vue2.0桌面组件库-Element

引入Element的步骤&#xff1a; 1.在vscode终端中执行命令&#xff08;需要联网&#xff09; 下载成功 2.在main.js中导入element.ui组件库。 同上&#xff0c;自定义的组件需要先在根组件中引入。 3.访问官网&#xff0c;复制调整代码

变阻器的主要特性和参数有哪些?

变阻器的主要特性和参数有很多&#xff0c;下面将详细介绍几个重要的特性和参数&#xff1a; 1. 电阻范围&#xff1a;滑动变阻器的电阻范围是指其最大电阻值和最小电阻值之间的范围&#xff0c;这个范围通常由制造商指定&#xff0c;用户在选择变阻器时需要根据实际需求选择合…

基于 SSM 的汽车租赁系统

基于 SSM 的电器网上订购系统 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Spring、JSP、MyBatis 工具&#xff1a;MyEclipse/IDEA、Tomcat 引言 汽车租赁是在约定时间内&#xff0c;租赁经营人将租赁汽车&#xff08;包括载货汽车和载客汽车&#x…

【机器学习】机器学习的详细阐述

机器学习&#xff08;Machine Learning, ML&#xff09;是一种通过从数据中学习来自适应改进预测和决策的人工智能技术。以下是对机器学习的详细阐述&#xff1a; 一、机器学习的定义 机器学习主要研究计算机系统对于特定任务的性能&#xff0c;逐步进行改善的算法和统计模型…

AFSim 仿真系统--子系统几何考虑

子系统几何考虑 概述 由于WSF试图表示以多种方式运行的子系统&#xff08;传感器&#xff0c;武器或通信&#xff09;&#xff0c;因此它提供的定义属性的机制&#xff0c;如几何限制&#xff0c;可能相当令人生畏。本文档提供了关于这些机制如何运作以及如何定义行为类似于真实…

Axure RP:打造动态交互的大屏可视化设计利器

Axure大屏可视化是指使用Axure RP这款原型设计工具来创建具有视觉冲击力和数据展示功能的大屏幕界面。Axure以其强大的交互设计和丰富的组件库&#xff0c;成为了实现大屏可视化的重要工具之一。以下是对Axure大屏可视化的详细阐述&#xff1a; 一、Axure在大屏可视化中的优势 …

给视频配背景音乐

介绍 给一段视频&#xff0c;想配个背景音乐&#xff0c;常规办法就是打开抖音或者剪映&#xff0c;咔咔咔一顿操作&#xff0c;完事儿&#xff0c;简单方便。但是如果你作为一个开发者呢&#xff0c;你又不能直接调用抖音剪映的接口吧&#xff08;特别有钱定制除外&#xff0…

ctfshow web入门 中期测评 web503--web516(无web511--web514)

web503 看了之前的文件的发现都没办法利用了 这个页面的源码发现了 layui.use([layer, form], function(){var layer layui.layer,form layui.form;form.on(submit(admin_settings), function(data){$.ajax({url:api/admin_settings.php,dataType:"json",type:po…

新手必看:Elasticsearch 入门全指南

Elasticsearch 入门介绍 Elasticsearch 是一个开源的分布式搜索和分析引擎&#xff0c;广泛应用于处理大规模数据和实时搜索需求。它基于 Apache Lucene 构建&#xff0c;具备高可扩展性和分布式特性&#xff0c;能够快速、可靠地存储、搜索和分析大量数据。本文将介绍 Elasti…

STM32项目分享:智能台灯(机智云)系统

目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 PCB图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片&#xff1a; 哔哩哔哩视频链接&#xff1a; https://www.bilibili.com/video/BV1My411q7fE…

CheckBox实现原理分析

CheckBox 是 Android 中的一个常用控件&#xff0c;用于实现复选框的功能。它继承自 CompoundButton&#xff0c;后者又继承自 Button。CheckBox 可以用来表示一个布尔值的选择状态&#xff0c;通常用于收集用户的选择&#xff0c;例如在表单中选择多个选项。 接下来&#xff…