打卡51天------图论(深搜/广搜应用题)

最近真的太忙了,没时间刷题,白天工作,我在church的Choir事工还不想停止,需要我在工作、生活、church做一个平衡,周六慢慢补上吧,交托给上Di。

一、岛屿数量-深搜

注意深搜的两种写法,熟练掌握这两种写法 以及 知道区别在哪里,才算掌握的深搜

代码随想录

const r1 = require('readline').createInterface({ input: process.stdin });
// 创建readline接口
let iter = r1[Symbol.asyncIterator]();
// 创建异步迭代器
const readline = async () => (await iter.next()).value;let graph
let N, M
let visited
let result = 0
const dir = [[0, 1], [1, 0], [0, -1], [-1, 0]]// 读取输入,初始化地图
const initGraph = async () => {let line = await readline();[N, M] = line.split(' ').map(Number);graph = new Array(N).fill(0).map(() => new Array(M).fill(0))visited = new Array(N).fill(false).map(() => new Array(M).fill(false))for (let i = 0; i < N; i++) {line = await readline()line = line.split(' ').map(Number)for (let j = 0; j < M; j++) {graph[i][j] = line[j]}}
}/*** @description: 从节点x,y开始深度优先遍历* @param {*} graph 是地图,也就是一个二维数组* @param {*} visited 标记访问过的节点,不要重复访问* @param {*} x 表示开始搜索节点的下标* @param {*} y 表示开始搜索节点的下标* @return {*}*/
const dfs = (graph, visited, x, y) => {for (let i = 0; i < 4; i++) {const nextx = x + dir[i][0]const nexty = y + dir[i][1]if (nextx < 0 || nextx >= N || nexty < 0 || nexty >= M) continueif (!visited[nextx][nexty] && graph[nextx][nexty] === 1) {visited[nextx][nexty] = truedfs(graph, visited, nextx, nexty)}}
}(async function () {// 读取输入,初始化地图await initGraph()// 统计岛屿数for (let i = 0; i < N; i++) {for (let j = 0; j < M; j++) {if (!visited[i][j] && graph[i][j] === 1) {// 标记已访问visited[i][j] = true// 遇到没访问过的陆地,+1result++// 深度优先遍历,将相邻陆地标记为已访问dfs(graph, visited, i, j)}}}console.log(result);
})()

二、岛屿数量 广搜

注意广搜的两种写法,第一种写法为什么会超时, 如果自己做的录友,题目通过了,也要仔细看第一种写法的超时版本,弄清楚为什么会超时,因为你第一次 幸运 没那么想,第二次可就不一定了。

代码随想录

const r1 = require('readline').createInterface({ input: process.stdin });
// 创建readline接口
let iter = r1[Symbol.asyncIterator]();
// 创建异步迭代器
const readline = async () => (await iter.next()).value;let graph
let N, M
let visited
let result = 0
const dir = [[0, 1], [1, 0], [0, -1], [-1, 0]]// 读取输入,初始化地图
const initGraph = async () => {let line = await readline();[N, M] = line.split(' ').map(Number);graph = new Array(N).fill(0).map(() => new Array(M).fill(0))visited = new Array(N).fill(false).map(() => new Array(M).fill(false))for (let i = 0; i < N; i++) {line = await readline()line = line.split(' ').map(Number)for (let j = 0; j < M; j++) {graph[i][j] = line[j]}}
}/*** @description: 从(x, y)开始广度优先遍历* @param {*} graph 地图* @param {*} visited 访问过的节点* @param {*} x 开始搜索节点的下标* @param {*} y 开始搜索节点的下标* @return {*}*/
const bfs = (graph, visited, x, y) => {let queue = []queue.push([x, y])visited[x][y] = true  //只要加入队列就立刻标记为访问过while (queue.length) {let [x, y] = queue.shift()for (let i = 0; i < 4; i++) {let nextx = x + dir[i][0]let nexty = y + dir[i][1]if(nextx < 0 || nextx >= N || nexty < 0 || nexty >= M) continueif(!visited[nextx][nexty] && graph[nextx][nexty] === 1){queue.push([nextx, nexty])visited[nextx][nexty] = true}}}}(async function () {// 读取输入,初始化地图await initGraph()// 统计岛屿数for (let i = 0; i < N; i++) {for (let j = 0; j < M; j++) {if (!visited[i][j] && graph[i][j] === 1) {// 遇到没访问过的陆地,+1result++// 广度优先遍历,将相邻陆地标记为已访问bfs(graph, visited, i, j)}}}console.log(result);
})()

三、岛屿的最大面积

本题就是基础题了,做过上面的题目,本题很快。

代码随想录

// 广搜版const r1 = require('readline').createInterface({ input: process.stdin });
// 创建readline接口
let iter = r1[Symbol.asyncIterator]();
// 创建异步迭代器
const readline = async () => (await iter.next()).value;let graph // 地图
let N, M // 地图大小
let visited // 访问过的节点
let result = 0 // 最大岛屿面积
let count = 0 // 岛屿内节点数
const dir = [[0, 1], [1, 0], [0, -1], [-1, 0]] //方向// 读取输入,初始化地图
const initGraph = async () => {let line = await readline();[N, M] = line.split(' ').map(Number);graph = new Array(N).fill(0).map(() => new Array(M).fill(0))visited = new Array(N).fill(false).map(() => new Array(M).fill(false))for (let i = 0; i < N; i++) {line = await readline()line = line.split(' ').map(Number)for (let j = 0; j < M; j++) {graph[i][j] = line[j]}}
}/*** @description: 从(x, y)开始广度优先遍历* @param {*} graph 地图* @param {*} visited 访问过的节点* @param {*} x 开始搜索节点的下标* @param {*} y 开始搜索节点的下标* @return {*}*/
const bfs = (graph, visited, x, y) => {let queue = []queue.push([x, y])count++visited[x][y] = true  //只要加入队列就立刻标记为访问过while (queue.length) {let [xx, yy] = queue.shift()for (let i = 0; i < 4; i++) {let nextx = xx + dir[i][0]let nexty = yy + dir[i][1]if(nextx < 0 || nextx >= N || nexty < 0 || nexty >= M) continueif(!visited[nextx][nexty] && graph[nextx][nexty] === 1){queue.push([nextx, nexty])count++visited[nextx][nexty] = true}}}}(async function () {// 读取输入,初始化地图await initGraph()// 统计最大岛屿面积for (let i = 0; i < N; i++) {for (let j = 0; j < M; j++) {if (!visited[i][j] && graph[i][j] === 1) { //遇到没有访问过的陆地// 重新计算面积count = 0// 广度优先遍历,统计岛屿内节点数,并将岛屿标记为已访问bfs(graph, visited, i, j)// 更新最大岛屿面积result = Math.max(result, count)}}}console.log(result);
})()

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

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

相关文章

C#骑砍逻辑类Mod制作详细解说

前言&#xff1a; 最近在研究骑砍的mod&#xff0c;主要是想修改其中的逻辑部分&#xff0c;因此有了这篇帖子。 一&#xff0c;文件夹与XML配置 在Modules创建一个新文件夹&#xff0c;文件夹名称随意&#xff0c;不影响实际的读取。 文件夹下面的位置需要固定&#xff0c;因…

八股总结-----C++、数据结构、算法

1.内存基础 11.内存分区 代码区&#xff1a;存储可执行代码&#xff08;程序指令&#xff09;。 全局区&#xff1a;存储全局变量和静态变量&#xff08;已初始化和未初始化&#xff09;。 堆区&#xff1a;用于动态内存分配&#xff0c;由程序员管理。 栈区&#xff1a;存…

python:reportlab 生成PDF文件,生成基因图谱

reportLab是 python的一个第三方库&#xff0c;它能够用来生成PDF文件。这个库提供了一系列的工具&#xff0c;允许用户从简单的文档到复杂的多列布局进行PDF的创建和编辑。 使用 reportLab&#xff0c;你可以执行以下功能&#xff1a; 创建文本块、图片、图表等元素。 利用绘…

JS中【浅克隆】和【深克隆】方法解读

在JavaScript中&#xff0c;“克隆”指的是创建一个对象或数组的副本。克隆可以分为浅克隆和深克隆两种方式。了解这两种克隆的差异对编程非常重要。 浅克隆&#xff08;Shallow Clone&#xff09; 浅克隆会复制对象或数组的第一层属性&#xff0c;但对于嵌套的对象或数组&am…

如何通过rsync+sersync 实现同步备份

该文档是在很早之前写的&#xff0c;一直存在草稿箱中&#xff0c;最近在整理其它学习资料时发现还没有发布&#xff0c;内容和方法有可能和现在的操作系统版本有些不符合了&#xff0c;但处理思路没有变化&#xff0c;大家可以根据最新版本要求&#xff0c;参照该文档进行配置…

JVM调优原理

文章目录 引言I 调整JVM的默认堆内存配置1.1 java命令启动jar包时配置JVM 的内存参数1.2 基于Tomcat服务器部署的java应用,配置JVM 的内存参数II JVM GC 调优基本概念: 应用程序的响应时间(RT)和吞吐量(QPS)JVM调优原理调优思路调优方法JVM调优技巧建议引言 内存参数:ht…

南阳施工企业资质续期成本详解与节省策略

南阳施工企业资质续期费用涉及多个方面&#xff0c;包括官方收取的费用、咨询与代办费用、材料准备与审核费用等。以下是对这些费用的详细解析以及相应的节省方法&#xff1a; 一、费用详述 1. 官方收取的费用 延期申请费&#xff1a;这是办理资质续期时必须缴纳的费用&…

闲置物品|基于SprinBoot+vue的校园闲置物品交易平台(源码+数据库+文档)

校园闲置物品交易平台 目录 基于SprinBootvue的校园闲置物品交易平台 一、前言 二、系统设计 三、系统功能设计 5.1系统功能实现 5.2管理员模块实现 5.3用户模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xf…

项目:基于TCP的文件传输系统

项目介绍: 模拟FTP原理&#xff1a;客户端连接服务器后&#xff0c;向服务器发送一个文件。文件名可以通过参数指定&#xff0c;服务器端接收客户端传来的文件&#xff08;文件名随意&#xff09;&#xff0c;如果文件不存在自动创建文件&#xff0c;如果文件存在&#xff0c;…

PsConvertToGuiThread函数调用前传

PsConvertToGuiThread函数调用前传 第一部分&#xff1a;位置 chchenghaodeiMac base % grep "Kss_ErrorHandler" -nr ./ .//ntos/ke/i386/trap.asm:1026:Kss_ErrorHandler: .//ntos/ke/i386/trap.asm:1220: jae Kss_ErrorHandler ; if ae, try…

matlab 相位解缠

目录 一、功能概述1、相位解缠2、主要函数二、代码实现1、螺旋线的正确相位角2、使用不同阈值平移相位角3、将相移应用于矩阵三、参考链接本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的抄袭狗。 一、功能概述 1、相位解缠 对…

FPGA实现多功能SDI视频采集卡,基于GTX+RIFFA架构,提供2套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案本博已有的 SDI 编解码方案 3、详细设计方案设计框图SDI 输入设备Gv8601a 均衡器GTX 解串与串化SMPTE SD/HD/3G SDI IP核BT1120转RGBFDMA图像缓存RIFFA用户数据控制RIFFA架构详解Xilinx 7 Series Integrated Bloc…

C#面:ASP.NET MVC 中还有哪些注释属性用来验证?

在 ASP.NET MVC 中&#xff0c;除了常见的数据注解属性&#xff08;如Required、StringLength等&#xff09;&#xff0c;还有一些其他的注解属性用来验证数据。以下是一些常用的注解属性&#xff1a; Range&#xff1a;用于验证数字类型的属性值是否在指定的范围内。 [Range(…

中文乱码解决方案

解决程序中的中文乱码问题通常涉及到几个关键点&#xff1a;字符编码的设置、环境变量的配置以及程序内部处理方式。这里提供一些常见的解决方案&#xff1a; 1. 设置正确的输入输出流编码 如果你的应用程序是在读取或写入文件时出现乱码&#xff0c;确保设置了正确的文件编码…

智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序(XGBoost分类器)

智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序&#xff08;XGBoost分类器&#xff09; 文章目录 一、基本原理鲸鱼智能优化特征选择流程 二、实验结果三、核心代码四、代码获取五、总结 智能优化特征选择|基于鲸鱼WOA优化算法实现的特征选择研究Matlab程序…

从地图信息实时检测路口的各向通行状况、红绿灯及溢出情况

高德地图、百度地图都能获得实时的道路信息。 C# 编写的路况信息爬虫可获得准实时&#xff08;1分钟间隔&#xff09;的路口的各向通行状况、红绿灯及溢出情况。 优势&#xff1a; 投入少&#xff0c;效果好&#xff0c;无需安装设备&#xff1b; 缺陷&#xff1a; 时间间隔…

人工智能在网络安全领域的应用探索

随着网络技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;成为制约数字化进程的重要瓶颈。人工智能&#xff08;AI&#xff09;作为一种变革性技术&#xff0c;正逐步在网络安全领域展现出其巨大的潜力和价值。本文旨在探讨人工智能在网络安全领域的应用现状、优势…

更新RK3588开发板的rknn_server和librknnrt.so【这篇文章是RKNPU2从入门到实践 --- 【5】的配套文章】

作者使用的平台有&#xff1a; 一台装有Windows系统的宿主机&#xff0c;在该宿主机上装有Ubuntu 20.04虚拟系统&#xff1b; 瑞芯微RK3588开发板&#xff0c;开发板上的系统为Ubuntu22.04系统&#xff1b; 更新板子的 rknn_server 和 librknnrt.so&#xff0c;rknn_server 和…

单HTML文件集成Vue2+axios的使用

1、下载vue2.js和axios.js到本地 2、建一个HTML文件&#xff0c;内容如下&#xff1a; <html> <head><meta charset"UTF-8"><script src"./js/vue2.js"></script><script src"./js/axios.js"></script&…

USART之串口发送+接收应用案例

文章目录 前言一、电路接线图二、应用案例代码三、应用案例分析3.1 USART模块初始化3.1.1 RCC开启时钟3.1.2 GPIO初始化3.1.3 配置USART3.1.4 开启中断、配置NVIC3.1.5 开启USART 3.2 USART串口收发模块3.2.1 Serial_SendByte&#xff08;发送一个字节数据&#xff09;3.2.2 US…