代码随想录算法训练营day65 | 99. 岛屿数量 深搜、99. 岛屿数量 广搜、100. 岛屿的最大面积

本次题目都是卡码网上的

99. 岛屿数量 深搜

dirs = [(1, 0), (0, 1), (-1, 0), (0, -1)]def dfs(grid, visited, x, y):for i in range(4):nextx = x + dirs[i][0]nexty = y + dirs[i][1]# 越界了,直接跳过if nextx < 0 or nextx >= len(grid) or nexty < 0 or nexty >= len(grid[0]):continue# 没有访问过的,同时是陆地的if not visited[nextx][nexty] and grid[nextx][nexty] == 1:visited[nextx][nexty] = Truedfs(grid, visited, nextx, nexty)if __name__ == "__main__":n, m = map(int, input().strip().split())grid = [[i for i in map(int, input().split())] for j in range(n)]visited = [[False] * m for _ in range(n)]result = 0for i in range(n):for j in range(m):if not visited[i][j] and grid[i][j] == 1:visited[i][j] = Trueresult += 1dfs(grid, visited, i, j)print(result)

99. 岛屿数量 广搜

使用的队列,也可以用栈、数组,没有影响

import collections
dirs = [(1, 0), (0, 1), (-1, 0), (0, -1)]  # 四个方向def bfs(grid, visited, x, y):que = collections.deque()que.append((x, y))visited[x][y] = True  # 只要加入队列,立刻标记while que:curx, cury = que.popleft()for i in range(4):nextx = curx + dirs[i][0]nexty = cury + dirs[i][1]if nextx < 0 or nextx >= len(grid) or nexty < 0 or nexty >= len(grid[0]):continue# 没有访问过的,同时是陆地的if not visited[nextx][nexty] and grid[nextx][nexty] == 1:visited[nextx][nexty] = True  # 只要加入队列,立刻标记que.append((nextx, nexty))if __name__ == "__main__":n, m = map(int, input().strip().split())grid = [[i for i in map(int, input().strip().split())] for _ in range(n)]visited = [[False] * m for _ in range(n)]result = 0for i in range(n):for j in range(m):if not visited[i][j] and grid[i][j] == 1:result += 1bfs(grid, visited, i, j)print(result)

使用栈也行

dirs = [(1, 0), (0, 1), (-1, 0), (0, -1)]  # 四个方向def bfs(grid, visited, x, y):stack = [(x, y)]visited[x][y] = True  # 只要加入队列,立刻标记while stack:curx, cury = stack.pop()for i in range(4):nextx = curx + dirs[i][0]nexty = cury + dirs[i][1]if nextx < 0 or nextx >= len(grid) or nexty < 0 or nexty >= len(grid[0]):continue# 没有访问过的,同时是陆地的if not visited[nextx][nexty] and grid[nextx][nexty] == 1:visited[nextx][nexty] = True  # 只要加入队列,立刻标记stack.append((nextx, nexty))if __name__ == "__main__":n, m = map(int, input().strip().split())grid = [[i for i in map(int, input().strip().split())] for _ in range(n)]visited = [[False] * m for _ in range(n)]result = 0for i in range(n):for j in range(m):if not visited[i][j] and grid[i][j] == 1:result += 1bfs(grid, visited, i, j)print(result)

100. 岛屿的最大面积

关于Python中global的使用 https://www.freecodecamp.org/chinese/news/python-global-variables-examples/

count定义在最外面,是全局变量,但是不能在函数中修改(可以查看),修改前需要先声明global count

广搜代码

dirs = [(1, 0), (0, 1), (-1, 0), (0, -1)]  # 四个方向
count = 0def bfs(grid, visited, x, y):stack = [(x, y)]visited[x][y] = True  # 只要加入队列,立刻标记global countcount = 1while stack:curx, cury = stack.pop()for i in range(4):nextx = curx + dirs[i][0]nexty = cury + dirs[i][1]if nextx < 0 or nextx >= len(grid) or nexty < 0 or nexty >= len(grid[0]):continue# 没有访问过的,同时是陆地的if not visited[nextx][nexty] and grid[nextx][nexty] == 1:visited[nextx][nexty] = True  # 只要加入队列,立刻标记stack.append((nextx, nexty))count += 1if __name__ == "__main__":n, m = map(int, input().strip().split())grid = [[i for i in map(int, input().strip().split())] for _ in range(n)]visited = [[False] * m for _ in range(n)]result = 0for i in range(n):for j in range(m):if not visited[i][j] and grid[i][j] == 1:bfs(grid, visited, i, j)result = max(result, count)print(result)

深搜代码

dirs = [(1, 0), (0, 1), (-1, 0), (0, -1)]
count = 0def dfs(grid, visited, x, y):for i in range(4):nextx = x + dirs[i][0]nexty = y + dirs[i][1]# 越界了,直接跳过if nextx < 0 or nextx >= len(grid) or nexty < 0 or nexty >= len(grid[0]):continue# 没有访问过的,同时是陆地的if not visited[nextx][nexty] and grid[nextx][nexty] == 1:visited[nextx][nexty] = Trueglobal countcount += 1dfs(grid, visited, nextx, nexty)if __name__ == "__main__":n, m = map(int, input().strip().split())grid = [[i for i in map(int, input().split())] for j in range(n)]visited = [[False] * m for _ in range(n)]result = 0for i in range(n):for j in range(m):if not visited[i][j] and grid[i][j] == 1:visited[i][j] = Truecount = 1dfs(grid, visited, i, j)result = max(result, count)print(result)

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

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

相关文章

FCM(Framework Compatibility Matrix)

FCM&#xff08;Framework Compatibility Matrix&#xff09;是Android Open Source Project&#xff08;AOSP&#xff09;中的一个关键组件&#xff0c;用于定义和描述Android框架与设备之间的兼容性关系。以下是关于FCM的详细回答&#xff1a; 定义和目的&#xff1a; FCM是…

【研究】AI大模型需要什么样的硬件?

关注AI大模型 x 硬件的两条思路 从22年11月OpenAI推出ChatGPT至今&#xff0c;我们看到Chatbot应用的能力不断增强&#xff0c;从最初的文字问答&#xff0c;迅速向具有自主记忆、推理、规划和执行的全自动能力的AI Agent发展。我们认为端侧智能是大模型发展的重要分支。建议投…

Open WebUI升级到最新版本

背景介绍 open-webui是一个用于构建Web用户界面的开源库&#xff0c;它仿照 ChatGPT 的图形化界面&#xff0c;可以非常方便的调试、调用本地大语言模型。 目前该开源库更新较为活跃&#xff0c;从3个月前的版本&#xff08;v0.1.108&#xff09;到截止到2024年6月中旬发布的…

牛皮!手写一个 RPC 框架

设计一个RPC&#xff08;远程过程调用&#xff09;框架是一个复杂的过程&#xff0c;涉及到网络通信、序列化与反序列化、服务发现、负载均衡、容错机制等多个方面。以下是设计RPC框架的一些基本步骤&#xff1a; 1. 需求分析&#xff1a; 确定RPC框架需要支持的特性&#xf…

软件测试:实验二 白盒测试技术

一、实验目的 掌握静态白盒测试的技术和原理。掌握逻辑覆盖测试的方法和原理。掌握基本路径测试的方法和原理。 二、实验要求 掌握静态白盒测试的技术和原理。按照实验题目要求&#xff0c;完成指定程序的白盒测试。 三、实验内容与步骤 1、逻辑覆盖测试。请编写测试用例指…

2024年春季学期《算法分析与设计》考前热身练习(历年真题)[纯C语言+思路]

A: 递归求解 题目描述 请使用递归编写一个程序求如下表达式的计算结果&#xff1a; S(1) 1/2 S(2) 1/2 1/6 S(3) 1/2 1/6 1/12 S(4) 1/2 1/6 1/12 1/20 ...... S(n) 1/2 1/6 1/12 1/20 1/30 ...... 输入n (1<n<1000)&#xff0c;输出表达式S(n)的值&…

Oracle CPU使用率过高问题处理

1.下载Process Explorer 2.打开Process Explorer&#xff0c;查看CPU使用情况最高的进程 3.双击该进程&#xff0c;查看详情 \ 4. 获取cpu使用最好的线程tid 5. 查询sql_id select sql_id from v$session where paddr in( select addr from v$process where spid in(1…

电脑开机后出现Aptio Setup Utility 处理方法

电脑开机后出现Aptio Setup Utility怎么处理 Aptio Setup Utility界面的原因&#xff1a; 这是由于 bios设置与真实的硬件情况不匹配硬盘故障找不到可启动的硬盘情况 我的问题是找不到可启动的硬盘情况 解决方式如下&#xff1a; 进入如下界面了&#xff0c;选择Boot选项…

通过语言模型奖励实现视频大型多模态模型的直接偏好优化

在人工智能领域&#xff0c;大模型&#xff08;LLM&#xff09;的泛化能力一直是研究的重点。最新的研究通过直接偏好优化&#xff08;DPO&#xff09;技术&#xff0c;显著提升了LLM在视频指令跟随等任务中的表现。然而&#xff0c;提供信息丰富的反馈以检测生成响应中的幻觉现…

自然语言处理课程论文:《Attention is all you need》复现与解读

目录 1.背景介绍 1.1 文献介绍 1.2 研究背景 1.3 知识概述 1.3.1 机器翻译 1.3.2 attention机制与self-attention机制 2.数据来源与处理 2.1 数据集描述 2.2 数据处理 3. 模型架构 ​​​​​​​3.1 Positional Embedding ​​​​​​​3.2 Multi-Head Attention ​​​​​…

Qt-Advanced-Docking-System示例程序

写了一些简单的示例程序&#xff0c;帮助我更好地使用和了解Qt-Advanced-Docking-System 1.写一个如图页面布局的程序 m_pDockMangernew ads::CDockManager(this);this->setCentralWidget(m_pDockManger);ads::CDockWidget* centerDockWidgetnew ads::CDockWidget("中…

通过 PHP 实现自动爬虫爬取,以及分析抓取的数据

近年来&#xff0c;随着互联网的发展&#xff0c;数据爬取成为许多企业和个人所关注和需要的问题。数据爬取是通过编程技术从互联网上自动抓取数据进行分析&#xff0c;以达到自身的目的。其中&#xff0c;php 是一种非常常用且具有优势的编程语言&#xff0c;下面我们将讨论如…

JetBrains WebStorm 2024 mac/win版:效率至上,编码无忧

JetBrains WebStorm 2024 是一款专为前端开发者和全栈工程师打造的高 级集成开发环境(IDE)。它提供了对JavaScript、TypeScript、HTML5、CSS等技术的全面支持&#xff0c;帮助开发者更高效地进行前端开发。 WebStorm 2023 mac/win版获取 WebStorm 2024 拥有强大的智能代码补全…

从一万英尺外看libevent(源码刨析)

从一万英尺外看libevent 温馨提示&#xff1a;阅读时间大概二十分钟 前言 Libevent是用于编写高速可移植非阻塞IO应用的库&#xff0c;其设计目标是&#xff1a; 可移植性&#xff1a;使用libevent编写的程序应该可以在libevent支持的所有平台上工作。即使没有好的方式进行非…

js实现拖拽排序

<!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>拖拽排序</title><style>* {margin: 0;p…

manim边学边做--SingleStringMathTex

SingleStringMathTex是Mobjects分类中用来显示数学公式的class。 manim中有3个可以用来显示数学公式的class&#xff0c;还有两个是MathTex和Tex&#xff0c;后续再介绍。 从SingleStringMathTex的名称中也可以看出&#xff0c;它是用来显示只有一行的简单公式。 SingleStrin…

Elasticsearch:使用 semantic_text 简化语义搜索

作者&#xff1a;来自 Elastic Carlos Delgado, Mike Pellegrini semantic_text - 你知道&#xff0c;用于语义搜索&#xff01; 你是否想开始使用语义搜索来搜索数据&#xff0c;但专注于模型和结果而不是技术细节&#xff1f;我们引入了 semantic_text 字段类型&#xff0c;…

OpenAI开发者大会:OpenAI如何再次掀起AI领域的浪潮

对于AI行业的从业者来说&#xff0c;他们可能度过了一个不眠之夜。 北京时间2023年11月7日凌晨&#xff0c;美国人工智能公司OpenAI的开发者大会隆重举行。OpenAI的创始人Sam Altman与同事仅用短短45分钟的时间&#xff0c;在台上发布了他们团队的最新成果——GPT-4 Turbo。这一…

linux文本粘贴格式错乱的问题

vi/vim :set paste然后再 insert, 粘贴

vue+canvas画布实现网页签名效果

1、签名自定义组件代码示例&#xff1a; qianMing.vue <template><!-- 容器&#xff0c;包含画布和清除按钮 --><div class"signature-pad-container"><!-- 画布元素&#xff0c;用于用户签名 --><canvasref"canvas" <!--…