当前位置: 首页 > news >正文

【代码随想录——图论——岛屿问题】

1.岛屿数量

https://kamacoder.com/problempage.php?pid=1171
在这里插入图片描述

1.1 深度优先搜索

package mainimport "fmt"var direction = [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}func main() {var M, N intfmt.Scanln(&N, &M)sea := make([][]int, N)visited := make([][]bool, N)for i := 0; i < N; i++ {sea[i] = make([]int, M)visited[i] = make([]bool, M)}for i := 0; i < N; i++ {for j := 0; j < M; j++ {fmt.Scan(&sea[i][j])}}// 开始遍历searesult := 0for i := 0; i < N; i++ {for j := 0; j < M; j++ {if sea[i][j] == 1 && !visited[i][j] {dfs(i, j, &sea, &visited)//bfs(i, j, &sea, &visited)result += 1}}}fmt.Println(result)
}func dfs(x, y int, sea *[][]int, visited *[][]bool) {for i := 0; i < 4; i++ {newX := x + direction[i][0]newY := y + direction[i][1]if newX < 0 || newX >= len(*sea) || newY < 0 || newY >= len((*sea)[0]) {continue}if (*sea)[newX][newY] == 1 && !(*visited)[newX][newY] {(*visited)[newX][newY] = truedfs(newX, newY, sea, visited)}}
}

1.2 广度优先搜索

package mainimport "fmt"var direction = [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}func main() {var M, N intfmt.Scanln(&N, &M)sea := make([][]int, N)visited := make([][]bool, N)for i := 0; i < N; i++ {sea[i] = make([]int, M)visited[i] = make([]bool, M)}for i := 0; i < N; i++ {for j := 0; j < M; j++ {fmt.Scan(&sea[i][j])}}// 开始遍历searesult := 0for i := 0; i < N; i++ {for j := 0; j < M; j++ {if sea[i][j] == 1 && !visited[i][j] {bfs(i, j, &sea, &visited)result += 1}}}fmt.Println(result)
}func bfs(i, j int, sea *[][]int, visited *[][]bool) {queue := make([][2]int, 0)queue = append(queue, [2]int{i, j})(*visited)[i][j] = truefor len(queue) != 0 {pos := queue[0]for i := 0; i < 4; i++ {newX := pos[0] + direction[i][0]newY := pos[1] + direction[i][1]if newX < 0 || newX >= len(*sea) || newY < 0 || newY >= len((*sea)[0]) {continue}if (*sea)[newX][newY] == 1 && !(*visited)[newX][newY] {queue = append(queue, [2]int{newX, newY})(*visited)[newX][newY] = true}}queue = queue[1:]}
}

2.岛屿的最大面积

在这里插入图片描述

package mainimport "fmt"var direction = [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}func main() {var M, N intfmt.Scanln(&N, &M)sea := make([][]int, N)visited := make([][]bool, N)for i := 0; i < N; i++ {sea[i] = make([]int, M)visited[i] = make([]bool, M)}for i := 0; i < N; i++ {for j := 0; j < M; j++ {fmt.Scan(&sea[i][j])}}// 开始遍历searesult := 0for i := 0; i < N; i++ {for j := 0; j < M; j++ {if sea[i][j] == 1 && !visited[i][j] {area := bfs(i, j, &sea, &visited)if area>result{result = area}}}}fmt.Println(result)
}func bfs(i, j int, sea *[][]int, visited *[][]bool) int {queue := make([][2]int, 0)queue = append(queue, [2]int{i, j})(*visited)[i][j] = truearea := 0for len(queue) != 0 {pos := queue[0]for i := 0; i < 4; i++ {newX := pos[0] + direction[i][0]newY := pos[1] + direction[i][1]if newX < 0 || newX >= len(*sea) || newY < 0 || newY >= len((*sea)[0]) {continue}if (*sea)[newX][newY] == 1 && !(*visited)[newX][newY] {queue = append(queue, [2]int{newX, newY})(*visited)[newX][newY] = true}}queue = queue[1:]area += 1}return area
}

3.孤岛的总面积

在这里插入图片描述
思路:很简单,只需要优先遍历一下四周的所有点即可。

package mainimport "fmt"var direction = [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}func main() {var M, N intfmt.Scanln(&N, &M)sea := make([][]int, N)visited := make([][]bool, N)for i := 0; i < N; i++ {sea[i] = make([]int, M)visited[i] = make([]bool, M)}for i := 0; i < N; i++ {for j := 0; j < M; j++ {fmt.Scan(&sea[i][j])}}//优先遍历陆地边缘for i := 0; i < N; i++ {if sea[i][0] == 1 && !visited[i][0] {bfs(i, 0, &sea, &visited)}}for i := 0; i < N; i++ {if sea[i][N-1] == 1 && !visited[i][N-1] {bfs(i, N-1, &sea, &visited)}}for i := 0; i < M; i++ {if sea[0][i] == 1 && !visited[0][i] {bfs(0, i, &sea, &visited)}}for i := 0; i < M; i++ {if sea[N-1][i] == 1 && !visited[N-1][i] {bfs(N-1, i, &sea, &visited)}}// 开始遍历searesult := 0for i := 1; i < N-1; i++ {for j := 1; j < M-1; j++ {if sea[i][j] == 1 && !visited[i][j] {area := bfs(i, j, &sea, &visited)result += area}}}fmt.Println(result)
}func bfs(i, j int, sea *[][]int, visited *[][]bool) int {queue := make([][2]int, 0)queue = append(queue, [2]int{i, j})(*visited)[i][j] = truearea := 0for len(queue) != 0 {pos := queue[0]for i := 0; i < 4; i++ {newX := pos[0] + direction[i][0]newY := pos[1] + direction[i][1]if newX < 0 || newX >= len(*sea) || newY < 0 || newY >= len((*sea)[0]) {continue}if (*sea)[newX][newY] == 1 && !(*visited)[newX][newY] {queue = append(queue, [2]int{newX, newY})(*visited)[newX][newY] = true}}queue = queue[1:]area += 1}return area
}

4.沉没孤岛

在这里插入图片描述
思路:遍历完四周之后输出visited数组即可。

package mainimport "fmt"var direction = [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}func main() {var M, N intfmt.Scanln(&N, &M)sea := make([][]int, N)visited := make([][]bool, N)for i := 0; i < N; i++ {sea[i] = make([]int, M)visited[i] = make([]bool, M)}for i := 0; i < N; i++ {for j := 0; j < M; j++ {fmt.Scan(&sea[i][j])}}// 优先遍历陆地边缘for i := 0; i < N; i++ {if sea[i][0] == 1 && !visited[i][0] {bfs(i, 0, N, M, &sea, &visited)}if sea[i][M-1] == 1 && !visited[i][M-1] {bfs(i, M-1, N, M, &sea, &visited)}}for i := 0; i < M; i++ {if sea[0][i] == 1 && !visited[0][i] {bfs(0, i, N, M, &sea, &visited)}if sea[N-1][i] == 1 && !visited[N-1][i] {bfs(N-1, i, N, M, &sea, &visited)}}// 开始遍历visitedfor i := 0; i < N; i++ {for j := 0; j < M; j++ {if visited[i][j] {fmt.Print(1)} else {fmt.Print(0)}fmt.Print(" ")}fmt.Println()}
}func bfs(i, j, N, M int, sea *[][]int, visited *[][]bool) int {queue := make([][2]int, 0)queue = append(queue, [2]int{i, j})(*visited)[i][j] = truearea := 0for len(queue) != 0 {pos := queue[0]queue = queue[1:]area += 1for i := 0; i < 4; i++ {newX := pos[0] + direction[i][0]newY := pos[1] + direction[i][1]if newX < 0 || newX >= N || newY < 0 || newY >= M {continue}if (*sea)[newX][newY] == 1 && !(*visited)[newX][newY] {queue = append(queue, [2]int{newX, newY})(*visited)[newX][newY] = true}}}return area
}

相关文章:

【代码随想录——图论——岛屿问题】

1.岛屿数量 https://kamacoder.com/problempage.php?pid1171 1.1 深度优先搜索 package mainimport "fmt"var direction [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}func main() {var M, N intfmt.Scanln(&N, &M)sea : make([][]int, N)visited : make…...

异步调用 - 初识

目录 1、引入 2、同步调用 2.1、例子&#xff1a;支付功能 2.2、同步调用的好处 2.3、同步调用的缺点 3、异步调用 3.1、异步调用的方式 3.2、异步调用的优势 3.3、异步调用的缺点 3.4、什么场景下使用异步调用 3.5、MQ技术选型 1、引入 为什么想要异步通信呢&…...

Java 家庭物联网

家庭物联网系统的代码和说明&#xff0c;包括用户认证、设备控制、数据监控、通知和警报、日志记录以及WebSocket实时更新功能。 ### 项目结构 plaintext home-iot-system ├── backend │ └── src │ └── main │ └── java │ └…...

机器学习——随机森林

随机森林 1、集成学习方法 通过构造多个模型组合来解决单一的问题。它的原理是生成多个分类器/模型&#xff0c;各自独立的学习和做出预测。这些预测最后会结合成组合预测&#xff0c;因此优于任何一个单分类得到的预测。 2、什么是随机森林&#xff1f; 随机森林是一个包含…...

Java - JDK17语法新增特性(如果想知道Java - JDK17语法新增常见的特性的知识点,那么只看这一篇就足够了!)

前言&#xff1a;Java在2021年发布了最新的长期支持版本&#xff1a;JDK 17。这个版本引入了许多新的语法特性&#xff0c;提升了开发效率和代码可读性。本文将简要介绍一些常见的新特性&#xff0c;帮助开发者快速掌握并应用于实际开发中。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨…...

Linux-DNS

DNS域名解析服务 1.DNS介绍 DNS 是域名系统 (Domain Name System) 的缩写&#xff0c;是因特网的一项核心服务&#xff0c;它作为可以将域名和IP地址相互映射的一个分布式数据库&#xff0c;能够使人更方便的访问互联网&#xff0c;而不用去记住能够被机器直接读取的IP数串。…...

使用gitlab的CI/CD实现logseq笔记自动发布为单页应用

使用gitlab的CI/CD实现logseq笔记自动发布为单页应用 使用gitlab的CI/CD实现logseq笔记自动发布为单页应用如何实现将logseq的笔记发布成网站使用 logseq-publish-docker 实现手动发布使用gitlab的CI/CD实现自动发布过程中的问题及解决参考资料 使用gitlab的CI/CD实现logseq笔记…...

云联壹云 FinOps:赋能某车企公有云成本管理与精细化运营

背景 某车企&#xff0c;世界 500 强企业&#xff0c;使用了大量的公有云资源&#xff0c;分布于多家公有云&#xff0c;月消费在千万级别。 业务线多且分散&#xff0c;相关的云消耗由一个核心团队进行管理&#xff0c;本次案例的内容将围绕这些云成本的管理展开的。 需求 …...

C#静态类与非静态类

1、静态类 静态类有几个重要的特点&#xff1a; 1&#xff09;无法实例化&#xff1a;由于静态类不能被实例化&#xff0c;因此它不会占用对象内存。 2&#xff09;静态成员&#xff1a;静态类只能包含静态成员&#xff08;静态方法、静态属性、静态事件等&#xff09;。 3&am…...

亚信安全:《2024云安全技术发展白皮书》

标签 云计算 安全威胁 云安全技术 网络攻击 数据保护 一句话总结 《云安全技术发展白皮书》全面分析了云计算安全威胁的演进&#xff0c;探讨了云安全技术的发展历程、当前应用和未来趋势&#xff0c;强调了构建全面云安全防护体系的重要性。 摘要 云安全威胁演进&#xff…...

GuLi商城-商品服务-API-品牌管理-云存储开通与使用

这里学习下阿里云对象存储 地址&#xff1a;对象存储 OSS_云存储服务_企业数据管理_存储-阿里云 登录支付宝账号&#xff0c;找到了我以前开通的阿里云对象存储 熟悉下API 文档中心 简介_对象存储(OSS)-阿里云帮助中心 我们将用这种方式上传阿里云OSS...

git 命令行初始化并上传项目

XXXX 为项目名称 1. 初始化 cd D:\XXXX git init git remote add origin http://账号192.168.1.231:8088/r/XXXX.git 2. 拉取项目&#xff0c;做本地合并 git pull origin master git fetch origin git merge origin/master 3. 添加注释&#xff0c;上传 git add . git c…...

Spring框架Mvc(2)

1.传递数组 代码示例 结果 2.集合参数存储并进行存储类似集合类 代码示例 postman进行测试 &#xff0c;测试结果 3.用Json来对其进行数据的传递 &#xff08;1&#xff09;Json是一个经常使用的用来表示对象的字符串 &#xff08;2&#xff09;Json字符串在字符串和对象…...

Python学习笔记29:进阶篇(十八)常见标准库使用之质量控制中的数据清洗

前言 本文是根据python官方教程中标准库模块的介绍&#xff0c;自己查询资料并整理&#xff0c;编写代码示例做出的学习笔记。 根据模块知识&#xff0c;一次讲解单个或者多个模块的内容。 教程链接&#xff1a;https://docs.python.org/zh-cn/3/tutorial/index.html 质量控制…...

【LLM】一、利用ollama本地部署大模型

目录 前言 一、Ollama 简介 1、什么是Ollama 2、特点&#xff1a; 二、Windows部署 1.下载 2.安装 3.测试安装 4.模型部署&#xff1a; 5.注意 三、 Docker部署 1.docker安装 2.ollama镜像拉取 3.ollama运行容器 4.模型部署&#xff1a; 5.注意&#xff1a; 总结 前言…...

Java毕业设计 基于SSM vue新生报到系统小程序 微信小程序

Java毕业设计 基于SSM vue新生报到系统小程序 微信小程序 SSM 新生报到系统小程序 功能介绍 学生 登录 注册 忘记密码 首页 学校公告 录取信息 录取详情 师资力量 教师详情 收藏 评论 用户信息修改 宿舍安排 签到信息 在线缴费 教室分配 我的收藏管理 我要发贴 我的发贴 管理…...

玩转云服务:Oracle Cloud甲骨文永久免费云服务器注册及配置指南

上一篇&#xff0c;带大家分享了&#xff1a;如何薅一台腾讯云服务器。 不过&#xff0c;只有一个月免费额度&#xff0c;到期后需要付费使用。 相对而言&#xff0c;海外云厂商更加慷慨一些&#xff0c;比如微软Azure、甲骨文、亚马逊AWS等。 甲骨文2019年9月就推出了永久免…...

Zabbix——宏

目录 宏的类型 常用宏 定义和使用宏 宏的优先级 使用宏的示例 在 Zabbix 中&#xff0c;宏&#xff08;Macros&#xff09;是一个非常强大的功能&#xff0c;允许你在监控配置中使用动态变量。宏可以在各种配置项中使用&#xff0c;例如触发器、动作、通知、图形和模板等。…...

Unity 简单载具路线 Waypoint 导航

前言 在游戏开发和导航系统中&#xff0c;"waypoint" 是指路径中的一个特定位置或点。它通常用于定义一个物体或角色在场景中移动的目标位置或路径的一部分。通过一系列的 waypoints&#xff0c;可以指定复杂的移动路径和行为。以下是一些 waypoint 的具体用途&…...

科普文:微服务之服务网格Service Mesh

一、ServiceMesh概念 背景 随着业务的发展&#xff0c;传统单体应用的问题越来越严重&#xff1a; 单体应用代码库庞大&#xff0c;不易于理解和修改持续部署困难&#xff0c;由于单体应用各组件间依赖性强&#xff0c;只要其中任何一个组件发生更改&#xff0c;将重新部署整…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

jmeter聚合报告中参数详解

sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample&#xff08;样本数&#xff09; 表示测试中发送的请求数量&#xff0c;即测试执行了多少次请求。 单位&#xff0c;以个或者次数表示。 示例&#xff1a;…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

【Elasticsearch】Elasticsearch 在大数据生态圈的地位 实践经验

Elasticsearch 在大数据生态圈的地位 & 实践经验 1.Elasticsearch 的优势1.1 Elasticsearch 解决的核心问题1.1.1 传统方案的短板1.1.2 Elasticsearch 的解决方案 1.2 与大数据组件的对比优势1.3 关键优势技术支撑1.4 Elasticsearch 的竞品1.4.1 全文搜索领域1.4.2 日志分析…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节&#xff1a;强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说&#xff0c;这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发&#xff08;例如 Flutter、React Na…...