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

代码随想录算法训练营Day-50 图论02 | 99.岛屿数量-深搜、99.岛屿数量-广搜 、100.岛屿的最大面积

99.岛屿数量-深搜主函数比较朴素定义基础变量接收数据遍历图节点对每个节点进行处理遇到没访问过的陆地就result然后深搜这篇陆地的上下左右把和这片土地挨着的所有土地标记为访问过也就是把一片岛屿都标记为访问过之后再遍历到这片岛屿的其他陆地节点时就直接跳过了。遍历完之后把所有的新大陆计数并搜索成岛屿最后结果就是岛屿数量了。深搜函数有两种写法一种是终止条件显示写出也就是终止条件判断节点是否访问过以及是否是陆地如果不是陆地或者被访问过那么就return作为终止条件然后在函数逻辑里面只进行下一个节点上下左右是否越界的判断其实也可以把越界判断也放在终止条件里也就是一开始判断xy是否越界下面递归逻辑里的下一个节点就不需要进行判断了。#includeiostream using namespace std; #includevector int dir[4][2]{0,1,1,0,-1,0,0,-1}; void dfs(vectorvectorint grid, vectorvectorbool visited, int x, int y){ if(grid[x][y]0 || visited[x][y]true) return; visited[x][y] true; for(int i0;i4;i){ int nextx xdir[i][0]; int nexty ydir[i][1]; if(nextx0 || nextxgrid.size() || nexty0 || nextygrid[0].size()) continue; dfs(grid, visited, nextx, nexty); } } int main(){ int n,m; cinnm; vectorvectorint grid(n,vectorint(m)); for(int i0;in;i){ for(int j0;jm;j){ cingrid[i][j]; } } vectorvectorbool visited(n,vectorbool(m,false)); int result0; for(int i0;in;i){ for(int j0;jm;j){ if(grid[i][j]1 visited[i][j]0){ result; dfs(grid, visited, i, j); } } } coutresultendl; }一种是终止条件隐式在递归逻辑里面由于只有符合条件索引不越界坐标是陆地且未被访问的节点才会被送入下一层递归所以其实相当于隐含了终止条件。#includeiostream using namespace std; #includevector int dir[4][2]{0,1,1,0,-1,0,0,-1}; void dfs(vectorvectorint grid, vectorvectorbool visited, int x, int y){ for(int i0;i4;i){ int nextx xdir[i][0]; int nexty ydir[i][1]; if(nextx0 || nextxgrid.size() || nexty0 || nextygrid[0].size()) continue; if(grid[nextx][nexty]1 visited[nextx][nexty]false){ visited[nextx][nexty] true; dfs(grid, visited, nextx, nexty); } } } int main(){ int n,m; cinnm; vectorvectorint grid(n,vectorint(m)); for(int i0;in;i){ for(int j0;jm;j){ cingrid[i][j]; } } vectorvectorbool visited(n,vectorbool(m,false)); int result0; for(int i0;in;i){ for(int j0;jm;j){ if(grid[i][j]1 visited[i][j]0){ result; dfs(grid, visited, i, j); } } } coutresultendl; }99.岛屿数量-广搜广搜的主函数逻辑和深搜没变化主要是搜索岛屿的逻辑有一些区别。广搜岛屿首先定义队列然后把起点入队将入队坐标立刻标记为访问过因为入队坐标就是“待搜索周围四方向的中心坐标”因此它本身肯定访问过然后循环直到队为空首先获取队头并弹出然后执行四个方向遍历判断新坐标是否越界是否是陆地且未访问过一旦满足就入队并立刻将坐标标记为访问过。注标记为访问过一定要在入队以后而不是出队时否则会让节点重复入队浪费时间。#includeiostream using namespace std; #includevector #includequeue int dir[4][2]{0,1,1,0,-1,0,0,-1}; void bfs(vectorvectorint grid, vectorvectorbool visited, int x, int y){ queuepairint,int qe; qe.push({x,y}); visited[x][y]true; while(!qe.empty()){ pairint,int pr qe.front();qe.pop(); for(int i0;i4;i){ int nextx pr.firstdir[i][0]; int nexty pr.seconddir[i][1]; if(nextx0 || nextxgrid.size() || nexty0 || nextygrid[0].size()) continue; if(grid[nextx][nexty]1 visited[nextx][nexty]false){ qe.push({nextx,nexty}); visited[nextx][nexty] true; } } } } int main(){ int n,m; cinnm; vectorvectorint grid(n,vectorint(m)); for(int i0;in;i){ for(int j0;jm;j){ cingrid[i][j]; } } vectorvectorbool visited(n,vectorbool(m,false)); int result0; for(int i0;in;i){ for(int j0;jm;j){ if(grid[i][j]1 visited[i][j]0){ result; bfs(grid, visited, i, j); } } } coutresultendl; }100.岛屿的最大面积本题就是在深搜或者广搜函数里加一个计数变量每标记一个岛屿中的新陆地时就加1搜索完之后计数就达到了岛屿的面积。注意在main函数调用搜索函数之前要先把当前遍历到的坐标也就是起点先标记为访问过然后将计数变量初始化为1因为岛屿的面积是从1开始也就是至少为1。#includeiostream using namespace std; #includevector int dir[4][2]{0,1,1,0,-1,0,0,-1}; void dfs(vectorvectorint grid, vectorvectorbool visited, int x, int y, int count){ for(int i0;i4;i){ int nextx xdir[i][0]; int nexty ydir[i][1]; if(nextx0 || nextxgrid.size() || nexty0 || nextygrid[0].size()) continue; if(grid[nextx][nexty]1 visited[nextx][nexty]false){ visited[nextx][nexty] true; count; dfs(grid, visited, nextx, nexty, count); } } } int main(){ int n,m; cinnm; vectorvectorint grid(n,vectorint(m)); for(int i0;in;i){ for(int j0;jm;j){ cingrid[i][j]; } } vectorvectorbool visited(n,vectorbool(m,false)); int result0; for(int i0;in;i){ for(int j0;jm;j){ if(grid[i][j]1 visited[i][j]0){ visited[i][j] true; int newnum 1; dfs(grid, visited, i, j, newnum); result max(result,newnum); } } } coutresultendl; }

相关文章:

代码随想录算法训练营Day-50 图论02 | 99.岛屿数量-深搜、99.岛屿数量-广搜 、100.岛屿的最大面积

99.岛屿数量-深搜主函数比较朴素:定义基础变量,接收数据,遍历图节点,对每个节点进行处理:遇到没访问过的陆地就result,然后深搜这篇陆地的上下左右,把和这片土地挨着的所有土地标记为访问过&…...

Redis 身份迷失

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

基于MCP协议与微软Graph API构建安全可控的AI助手Outlook集成方案

1. 项目概述:为AI助手开启你的Outlook个人账户 如果你和我一样,每天被Outlook邮箱、日历和待办事项淹没,同时又希望AI助手能真正帮上忙——比如自动整理邮件、安排日程、甚至起草回复——那么你肯定遇到过工具链断裂的烦恼。市面上的自动化方…...

AI代理自动化LinkedIn广告管理:从规则引擎到机器学习优化

1. 项目概述:当LinkedIn广告遇上AI代理如果你负责过B2B营销或者企业级产品的推广,大概率对LinkedIn广告又爱又恨。爱的是,它的用户画像精准得可怕,几乎是为B2B场景量身定做的平台;恨的是,它的后台操作复杂&…...

猫抓cat-catch浏览器扩展:专业级资源嗅探与下载解决方案

猫抓cat-catch浏览器扩展:专业级资源嗅探与下载解决方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾遇到这样的情况&#…...

基于Claude的模块化代码生成框架:多代理协作开发实践

1. 项目概述:当Claude遇上代码子代理,一场开发范式的革新如果你和我一样,长期在代码生成、自动化脚本编写和复杂系统架构设计的第一线摸爬滚打,那你一定对“上下文窗口”这个词又爱又恨。爱的是,像Claude这样的顶级大模…...

Gemini CLI提示词库:AI辅助开发提效的工程化实践

1. 项目概述:一个为开发者提效的AI提示词库如果你和我一样,日常开发中经常需要借助AI助手来审查代码、生成文档、设计架构,那你肯定也经历过这样的时刻:面对一个复杂任务,你需要在聊天框里反复调整措辞,试图…...

构建AI对话桥梁:Claude API中间件设计与工程实践

1. 项目概述:构建一个高效、可控的AI对话桥梁最近在折腾一个挺有意思的项目,叫openclaw-claude-bridge。简单来说,这是一个“桥梁”工具,它的核心使命是让开发者能够以一种更灵活、更可控的方式,将强大的Claude系列AI模…...

干掉 IDEA!Cursor3 发布,VSCode 那套 IDE 过时了!

Cursor 3 用智能体管理控制台取代了传统代码编辑器,标志着 AI 辅助开发工具与开发者工作流程均已发生重大转变。作为同类产品中营收增长最快的 AI 代码编辑器,Cursor 发布了首款非代码编辑器产品。Cursor 3(代号 Glass)从零开始构…...

开源记忆增强系统mnemo-cortex:开发者的命令行知识管理利器

1. 项目概述:一个面向开发者的开源记忆增强系统如果你和我一样,每天被海量的代码片段、API文档、临时想法、会议纪要和待办事项淹没,那么“如何高效地记住并快速调用这些信息”就成了一个永恒的痛点。传统的笔记软件要么太重,要么…...

copy4ai:专为AI工作流设计的智能复制工具,解决网页内容格式粘贴难题

1. 项目概述:一个为AI工作流设计的智能复制工具最近在折腾各种AI工具链的时候,我经常遇到一个挺烦人的问题:想把网页上的一段代码、一个表格,或者是一段带有特殊格式的文本,原封不动地喂给ChatGPT或者Claude&#xff0…...

Claw-ED:基于Python的配置驱动Web爬虫框架实战指南

1. 项目概述与核心价值最近在折腾一个挺有意思的开源项目,叫Claw-ED。这个名字乍一看有点抽象,但如果你对数据抓取、自动化处理或者RPA(机器人流程自动化)感兴趣,那它绝对值得你花时间研究。简单来说,Claw-…...

AI工程化实战:从模型到服务的全链路部署与优化指南

1. 项目概述:一个面向AI应用开发的综合框架最近在开源社区里,Sunpeak-AI/sunpeak 这个项目引起了我的注意。它不是一个单一的模型或工具,而是一个旨在为AI应用开发提供“一站式”解决方案的框架。简单来说,你可以把它理解为一个工…...

PKSM终极指南:从菜鸟到宝可梦存档管理大师的完整路径

PKSM终极指南:从菜鸟到宝可梦存档管理大师的完整路径 【免费下载链接】PKSM Gen I to GenVIII save manager. 项目地址: https://gitcode.com/gh_mirrors/pk/PKSM 你是否曾经因为游戏存档意外丢失而痛心疾首?或者想要将第一世代的宝可梦带到第八世…...

GitClaw:基于GitHub Actions的AI智能体框架,实现自动化代码审查与仓库管理

1. 项目概述:当GitHub遇上AI智能体最近在开源社区里,一个名为gitclaw的项目引起了我的注意。它来自open-gitagent组织,名字本身就很有意思——“Git Claw”,直译是“Git爪子”,听起来就像是要给GitHub这个代码仓库平台…...

Adafruit Feather 32u4 FONA:基于Arduino与2G GSM的物联网远程通信开发板实战指南

1. 项目概述与核心价值如果你正在寻找一款能让你快速将物联网设备“扔”到世界任何角落,并且还能打个电话、发条短信的开发板,那么Adafruit Feather 32u4 FONA绝对值得你花时间研究。我最初接触它,是为了一个野外环境监测项目,需要…...

QQ群数据采集终极指南:3分钟快速上手自动化采集工具

QQ群数据采集终极指南:3分钟快速上手自动化采集工具 【免费下载链接】QQ-Groups-Spider QQ Groups Spider(QQ 群爬虫) 项目地址: https://gitcode.com/gh_mirrors/qq/QQ-Groups-Spider 还在为手动收集QQ群信息而烦恼吗?每天…...

程序员的副业天花板:靠接私活实现年入百万的秘诀

在互联网技术飞速发展的今天,软件测试作为保障软件质量的关键环节,其重要性日益凸显。对于软件测试从业者而言,除了在企业中深耕本职工作,利用专业技能开展副业,实现年入百万并非遥不可及的梦想。本文将从专业角度&…...

Wi-Fi模块在IoT与M2M领域的应用与优化

1. Wi-Fi模块在IoT与M2M领域的核心价值Wi-Fi技术作为物联网(IoT)和机器对机器(M2M)通信的基础设施,其重要性不言而喻。根据行业数据,到2025年全球IoT设备数量预计将突破750亿台,其中超过60%的设备将采用Wi-Fi作为主要连接方式。这种广泛采用背…...

AR眼镜AI助手开发实战:多模态融合与iOS集成指南

1. 项目概述:当AI助手遇见AR眼镜最近在AR(增强现实)和AI(人工智能)的交叉领域,一个名为“noa-for-ios”的开源项目引起了我的注意。简单来说,它是一套为iOS设备开发的、专门面向AR眼镜的AI助手S…...

如何3分钟完成Figma界面中文汉化:设计师必备的完整指南

如何3分钟完成Figma界面中文汉化:设计师必备的完整指南 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 还在为Figma的英文界面而烦恼吗?作为中文设计师&#xff…...

SDN与OpenFlow架构解析及路由实现

1. SDN与OpenFlow架构解析在传统网络架构中,控制平面与数据平面紧密耦合,每个网络设备都需要独立维护路由表和转发决策。这种分布式架构虽然具有高可靠性,但也带来了管理复杂、配置繁琐、创新缓慢等问题。软件定义网络(SDN&#x…...

【详细版教程】飞书聊天控制电脑 OpenClaw 配置实操教程(含安装包)

OpenClaw 飞书机器人配置教程|一键对接飞书 聊天下达 AI 指令 适配版本:OpenClaw v2.7.1(小龙虾)前置要求:已部署 OpenClaw Windows 端(Win10/Win11 均可),未部署可先下载一键部署包…...

基于MCP协议构建AI驱动的网络安全情报聚合与自动化分析平台

1. 项目概述:一个为AI工作流赋能的网络安全情报中枢 如果你是一名安全工程师、渗透测试人员,或者正在构建一个需要实时威胁情报的AI智能体,那么你肯定对这样的场景不陌生:为了评估一个供应商的风险,你需要在浏览器里同…...

生物科研绘图的终极解决方案:Bioicons免费矢量图标库完全指南

生物科研绘图的终极解决方案:Bioicons免费矢量图标库完全指南 【免费下载链接】bioicons A library of free open source icons for science illustrations in biology and chemistry 项目地址: https://gitcode.com/gh_mirrors/bi/bioicons 还在为科研论文配…...

3步快速上手:用novel-downloader轻松保存网络小说到本地

3步快速上手:用novel-downloader轻松保存网络小说到本地 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader novel-downloader是一款功能强大的浏览器小说下载器,…...

博客生成器架构设计:基于LLM与模块化流水线的自动化内容创作实践

1. 项目概述:一个博客生成器的诞生与价值在内容创作领域,效率和质量是永恒的矛盾。作为一名写了十几年博客的“老鸟”,我深知从灵光一闪到一篇结构清晰、排版美观的文章发布,中间有多少琐碎的步骤:构思大纲、撰写内容、…...

主权身份技术解析:从DID、可验证凭证到零知识证明的完整架构与实践

1. 项目概述与核心价值最近在数字身份领域折腾,发现一个叫“TamTunnel/sovereign-identity”的项目挺有意思。这个名字乍一看有点抽象,但拆开来看,“sovereign-identity”直译就是“主权身份”,而“TamTunnel”像是一个代号或通道…...

嵌入式测试学习第 10天:主控、外设、传感器、通信模块

嵌入式常见硬件架构:主控、外设、传感器、通信模块一、整体架构总览二、第一部分:主控(设备大脑)真实实物样貌实物标注解读核心概念小白通俗理解嵌入式测试常见故障三、第二部分:外设模块(人机交互执行机构…...

从零构建本地AI编程助手:Mervelas的隐私优先架构与Bun技术栈实践

1. 项目概述:一个为开发者主权而生的本地AI编程助手 如果你和我一样,对市面上那些“全家桶”式的AI编程助手感到厌倦——它们要么偷偷收集你的代码数据,要么把你锁死在某个特定的云服务里,用起来总感觉束手束脚——那么&#xff…...