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

【日常做题】 代码随想录(岛屿最大面积+寻宝)

‍ 关于作者会编程的土豆“不是因为看见希望才坚持而是坚持了才看见希望。”你好我是会编程的土豆一名热爱后端技术的Java学习者。正在更新中的专栏《数据结构与算法》《leetcode hot 100》《数据库mysql》作者简介后端学习者1.#includeiostream #includevector #includealgorithm #includequeue using namespace std; vectorvectorintedge; long long maxn 0; long long cur; int dx[4] { 1,-1,0,0 }; int dy[4] { 0,0,1,-1 }; int N, M; void dfs(int x, int y) { for (int i 0; i 4; i) { int nx x dx[i]; int ny y dy[i]; if (nx 1 nx N ny 1 ny M edge[nx][ny] 1) { cur; maxn max(maxn, cur); edge[nx][ny] 0; dfs(nx, ny); } } } int main() { cin N M; edge.resize(N 1, vectorint(M 1, 0)); for (int i 1; i N; i) { for (int j 1; j M; j) { cin edge[i][j]; } } for (int i 1; i N; i) { for (int j 1; j M; j) { if (edge[i][j] 1) { edge[i][j] 0; cur 1; maxn max(maxn, cur); dfs(i, j); } } } cout maxn endl; return 0; }从“数岛屿”到“最大岛屿面积”DFS 进阶一篇讲透附代码细节分析很多同学做到“岛屿数量”就停了但其实更经典的一道题是在一个二维网格中求最大连通块的面积你这段代码已经写到了这个进阶版本这篇文章我们就把它彻底讲清楚。一、问题本质给你一个 N × M 的网格1表示陆地0表示水要求找出最大的“岛屿面积”连续的1的数量举个例子1 1 0 1 0 0 0 1 1这里左上角岛面积 3右下角岛面积 2答案3二、核心思路非常重要相比“数岛屿”这里只多了一步每找到一个岛 → 统计它的大小 → 更新最大值三、变量含义解释你的代码中有两个关键变量long long maxn 0; // 最大岛屿面积 long long cur; // 当前岛屿面积四、DFS 核心逻辑来看你的 DFSvoid dfs(int x, int y) { for (int i 0; i 4; i) { int nx x dx[i]; int ny y dy[i]; if (nx 1 nx N ny 1 ny M edge[nx][ny] 1) { cur; maxn max(maxn, cur); edge[nx][ny] 0; dfs(nx, ny); } } }五、DFS 在干什么一句话总结从一个点出发把整个岛屿遍历一遍同时统计大小执行流程遇到一个新的 1岛屿起点cur 1当前面积从1开始DFS 扩展每找到一个 1 →cur同时更新最大值六、主函数逻辑if (edge[i][j] 1) { edge[i][j] 0; cur 1; maxn max(maxn, cur); dfs(i, j); }逻辑解释发现一个新岛 → 初始化面积 cur 1 → DFS 扩展整个岛 → 更新最大值七、一个关键优化点更推荐写法你现在的写法是cur; maxn max(maxn, cur);其实可以更清晰一点推荐写法DFS返回面积int dfs(int x, int y) { int area 1; // 当前节点算1 for (int i 0; i 4; i) { int nx x dx[i]; int ny y dy[i]; if (nx 1 nx N ny 1 ny M edge[nx][ny] 1) { edge[nx][ny] 0; area dfs(nx, ny); } } return area; }主函数写法if (edge[i][j] 1) { edge[i][j] 0; int area dfs(i, j); maxn max(maxn, area); }为什么更好逻辑更清晰一个函数只干一件事 → 返回面积 避免全局变量混乱 更符合面试写法八、时间复杂度O(N × M)原因每个点最多访问一次九、空间复杂度最坏 O(N × M)原因递归栈可能很深全是1的情况十、常见错误1. 忘记标记访问edge[nx][ny] 0;否则会无限递归。2. cur 没初始化cur 1;3. 起点没处理edge[i][j] 0;必须在 DFS 前做。十一、DFS vs BFS 做这个题方法思路推荐程度DFS递归扩展简单直观BFS队列扩展更稳定防爆栈十二、一句话总结这道题的本质就是用 DFS 找连通块同时统计每个连通块的大小取最大值2.#includeiostream #includevector #includealgorithm using namespace std; typedef struct node { int u, v, w; }node; vectornodeedge; vectorintparent; bool f(node a, node b) { return a.w b.w; } int find(int x) { if (parent[x] ! x) { parent[x] find(parent[x]); } return parent[x]; } int main() { int V, E; cin V E; parent.resize(V 1); for (int i 1; i V; i) { parent[i] i; } for (int i 0; i E; i) { int u, v, w; cin u v w; edge.push_back({ u,v,w }); } sort(edge.begin(), edge.end(), f); long long sum 0; long long use 0; for (int i 0; i edge.size(); i) { int u edge[i].u; int v edge[i].v; int w edge[i].w; int rootu find(u); int rootv find(v); if (rootu ! rootv) { parent[rootu] rootv; sum w; use; if (use V-1) break; } } cout sum endl; return 0; }Kruskal算法从入门到实战最小生成树一篇彻底讲明白附完整代码最小生成树MST是图论里非常核心的一块内容而Kruskal算法是最经典、最适合入门的一种解法。你这份代码已经是一个标准模板级写法了这篇文章我帮你整理成一篇可以直接发 CSDN 的高质量版本从思路到代码彻底讲清楚。一、问题背景什么是最小生成树给你一个无向图有 V 个点有 E 条边每条边有权值要求选出若干条边使所有点连通并且总权值最小核心特点1. 必须连通所有点 2. 不能有环 3. 边数一定是 V - 1二、Kruskal算法核心思想一句话理解从小到大选边只要不形成环就加入为什么可行因为每次都选当前最小的边贪心 并用并查集保证不会成环三、代码结构解析我们一步一步拆代码。1. 边结构体typedef struct node { int u, v, w; } node;表示一条边u → v权值 w2. 排序关键一步bool f(node a, node b) { return a.w b.w; }sort(edge.begin(), edge.end(), f);作用按边权从小到大排序3. 并查集初始化parent.resize(V 1); for (int i 1; i V; i) { parent[i] i; }含义每个点一开始是独立集合4. find函数路径压缩int find(int x) { if (parent[x] ! x) { parent[x] find(parent[x]); } return parent[x]; }作用查找集合的根节点并压缩路径四、Kruskal核心流程for (int i 0; i edge.size(); i) { int u edge[i].u; int v edge[i].v; int w edge[i].w; int rootu find(u); int rootv find(v); if (rootu ! rootv) { parent[rootu] rootv; sum w; use; if (use V - 1) break; } }逻辑解释情况1不在同一集合可以连 → 不会成环操作合并集合 加入权值情况2在同一集合跳过 → 否则会形成环五、为什么一定是 V - 1 条边树的性质n个点的最小连通结构一定有 n-1 条边所以if (use V - 1) break;这是一个关键优化提前结束避免不必要计算

相关文章:

【日常做题】 代码随想录(岛屿最大面积+寻宝)

👨‍💻 关于作者:会编程的土豆 “不是因为看见希望才坚持,而是坚持了才看见希望。” 你好,我是会编程的土豆,一名热爱后端技术的Java学习者。 📚 正在更新中的专栏: 《数据结构与算…...

电路板逆向分析神器:OpenBoardView帮你轻松查看.brd文件

电路板逆向分析神器:OpenBoardView帮你轻松查看.brd文件 【免费下载链接】OpenBoardView View .brd files 项目地址: https://gitcode.com/gh_mirrors/op/OpenBoardView 你是否曾经面对复杂的电路板设计文件束手无策?当需要维修硬件或分析电路时&…...

Rust的匹配中的区别语义

Rust的匹配机制以其强大的表达能力和安全性著称,而其中的"区别语义"更是其核心特性之一。所谓区别语义,指的是Rust在模式匹配时能够精确区分不同场景下的行为差异,从而避免常见错误并提高代码的可靠性。这种设计使得Rust在处理复杂…...

华硕笔记本性能控制新选择:G-Helper完全使用指南

华硕笔记本性能控制新选择:G-Helper完全使用指南 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, Scar, a…...

Pixel Script Temple 企业级应用:基于Java与数据库的批量图像生成系统

Pixel Script Temple 企业级应用:基于Java与数据库的批量图像生成系统 1. 电商批量图像生成的需求与挑战 在电商运营和内容创作领域,每天需要处理海量的商品图片和营销素材。传统的人工设计方式面临三大核心痛点:首先是人力成本高&#xff…...

【JVM深度解析】第27篇:并发编程实战案例与陷阱

摘要 理论千遍不如实践一遍。本文通过六个真实场景的并发问题,展示多线程编程中的常见陷阱:线程池 OOM、ThreadLocal 内存泄漏、双重检查锁单的隐藏危险、HashMap 并发死循环、生产者消费者模式死锁、以及 CountDownLatch 误用导致的测试失败。每个案例…...

5分钟上手ChemCrow:用AI化学助手完成专业级分析

5分钟上手ChemCrow:用AI化学助手完成专业级分析 【免费下载链接】chemcrow-public Chemcrow 项目地址: https://gitcode.com/gh_mirrors/ch/chemcrow-public 你是否曾为复杂的化学分析任务感到头疼?计算分子量、查询专利状态、预测化学反应产物&a…...

新手避坑指南:用RK3576开发板点亮MIPI-DSI屏幕,从接线到配置的完整流程

RK3576开发板实战:MIPI-DSI屏幕连接与配置避坑手册 第一次拿到RK3576开发板和MIPI-DSI屏幕时,那种既兴奋又忐忑的心情我至今记忆犹新。作为嵌入式开发的新手,面对密密麻麻的接口和陌生的术语,最担心的莫过于一个不小心就把几千块的…...

从MOVED错误到丝滑重定向:深入理解Redis集群的客户端寻址机制

从MOVED错误到丝滑重定向:深入理解Redis集群的客户端寻址机制 第一次在Redis集群中执行SET user:1001 "Alice"命令时,看到终端返回(error) MOVED 1234 192.168.1.2:6381的错误信息,我愣了几秒钟。作为一个习惯了单机Redis的开发者&…...

Bootstrap5 进度条

Bootstrap5 进度条 随着互联网技术的不断发展,前端开发工具和框架也在不断更新迭代。Bootstrap 作为全球最受欢迎的前端框架之一,其版本更新也备受关注。Bootstrap5 作为最新版本,在保持原有优势的基础上,也带来了一些新的功能和改进。本文将详细介绍 Bootstrap5 中进度条…...

7815与7915核心区别解析

7815与7915均为三端线性稳压集成电路,但其核心区别在于输出电压的极性:7815输出稳定的**15V正电压,而7915输出稳定的-15V**负电压。它们通常成对使用,为需要正负对称电源的模拟电路(如运算放大器、音频放大器&#xff…...

零基础玩转Sambert语音合成:开箱即用版,5分钟搭建AI配音系统

零基础玩转Sambert语音合成:开箱即用版,5分钟搭建AI配音系统 1. 引言:为什么选择开箱即用的语音合成? 想象一下,你正在制作一个短视频,需要给画面配上生动的旁白。传统方法要么自己录音,要么花…...

掌握RDKit化学信息学工具:从分子计算到药物发现的完整实战指南

掌握RDKit化学信息学工具:从分子计算到药物发现的完整实战指南 【免费下载链接】rdkit The official sources for the RDKit library 项目地址: https://gitcode.com/gh_mirrors/rd/rdkit RDKit作为现代化学信息学的核心工具包,为化学家、药物研发…...

无人机强化学习终极指南:如何用gym-pybullet-drones快速构建专业仿真环境

无人机强化学习终极指南:如何用gym-pybullet-drones快速构建专业仿真环境 【免费下载链接】gym-pybullet-drones PyBullet Gymnasium environments for single and multi-agent reinforcement learning of quadcopter control 项目地址: https://gitcode.com/gh_m…...

PvZ Toolkit:植物大战僵尸PC版终极修改指南

PvZ Toolkit:植物大战僵尸PC版终极修改指南 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit PvZ Toolkit是一款功能强大的植物大战僵尸PC版综合修改器,专为玩家打造个性化游戏…...

快速部署MT5文本增强工具:支持批量生成,提升工作效率

快速部署MT5文本增强工具:支持批量生成,提升工作效率 1. 工具简介与核心价值 MT5文本增强工具是一款基于阿里达摩院mT5模型开发的本地化NLP工具,专为中文文本处理场景设计。它能快速生成语义相同但表达多样的句子变体,有效解决数…...

EmojiOne Color彩色字体实战指南:打造生动表情符号的高效方案

EmojiOne Color彩色字体实战指南:打造生动表情符号的高效方案 【免费下载链接】emojione-color OpenType-SVG font of EmojiOne 2.3 项目地址: https://gitcode.com/gh_mirrors/em/emojione-color EmojiOne Color是一款基于OpenType-SVG格式的开源彩色表情字…...

从‘阴谋论’到代码:用Python和PyTorch亲手实现Dropout,搞懂训练测试为啥要‘精分’

从神经元"社交恐惧症"到代码实战:用Python拆解Dropout的双面人生 想象一下你正在组织一场大型团队建设活动——如果每次分组时都强制打乱成员组合,禁止小团体固化,会发生什么?那些总依赖特定搭档的"社交恐惧型&quo…...

ABAP2XLSX企业级Excel生成技术选型指南:5大优势与架构深度解析

ABAP2XLSX企业级Excel生成技术选型指南:5大优势与架构深度解析 【免费下载链接】abap2xlsx Generate your professional Excel spreadsheet from ABAP 项目地址: https://gitcode.com/gh_mirrors/ab/abap2xlsx 一、技术价值定位:为什么选择ABAP2X…...

零代码网页抓取神器:Web Scraper Chrome扩展完整指南

零代码网页抓取神器:Web Scraper Chrome扩展完整指南 【免费下载链接】web-scraper-chrome-extension Web data extraction tool implemented as chrome extension 项目地址: https://gitcode.com/gh_mirrors/we/web-scraper-chrome-extension 想要从任何网站…...

终极游戏存档备份方案:Ludusavi让你的游戏进度永不丢失 [特殊字符]

终极游戏存档备份方案:Ludusavi让你的游戏进度永不丢失 🎮 【免费下载链接】ludusavi Backup tool for PC game saves 项目地址: https://gitcode.com/gh_mirrors/lu/ludusavi 你是否曾因系统重装、硬盘故障或意外删除而失去宝贵的游戏进度&#…...

从图像分割到目标检测:膨胀卷积(空洞卷积)的核心原理与实战调优

1. 为什么我们需要膨胀卷积? 我第一次接触膨胀卷积是在做医学图像分割项目的时候。当时遇到一个头疼的问题:用传统卷积神经网络做肝脏CT图像分割时,小肿瘤总是检测不出来。反复调整网络结构后发现,问题出在感受野上——普通卷积层…...

Windows 11 LTSC 24H2 如何快速安装微软商店:完整解决方案

Windows 11 LTSC 24H2 如何快速安装微软商店:完整解决方案 【免费下载链接】LTSC-Add-MicrosoftStore Add Windows Store to Windows 11 24H2 LTSC 项目地址: https://gitcode.com/gh_mirrors/ltscad/LTSC-Add-MicrosoftStore 对于使用 Windows 11 LTSC 24H2…...

Tinder联合World推身份验证:前往验证球验证,可获五次免费推广及“已验证人类徽章”

Tinder携手World ID:面部扫描验证解锁免费推广Tinder用户通过前往World公司的身份验证球进行面部扫描,证明自己是真实人类后,可在应用程序中获得五次免费推广机会。这一服务源于去年World在日本的试点项目,如今正拓展至包括日本和…...

软件考古:咕咕文本背后的开发者工具文化

在互联网软件发展的历史长河中,有许多像咕咕文本这样的小工具曾经闪耀一时。 它们或许没有庞大的用户基数,或许没有持续的商业运营,但在特定的历史时期,它们解决了特定人群的实际问题。 今天,让我们以软件考古的视角…...

Windows安装APK文件的最佳工具:APK Installer全面指南

Windows安装APK文件的最佳工具:APK Installer全面指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为Windows电脑无法直接安装安卓应用而烦恼吗&…...

YimMenu:GTA V 终极安全增强菜单的完整指南

YimMenu:GTA V 终极安全增强菜单的完整指南 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu Y…...

JMeter实战指南:从零构建高效接口自动化测试框架

1. 为什么你需要JMeter自动化测试框架 第一次接触JMeter时,我也以为它只是个简单的接口测试工具。直到项目进入快速迭代阶段,我才发现手工维护上百个测试用例有多痛苦——每次需求变更都要逐个修改脚本,测试数据混杂在请求中难以维护&#xf…...

QobuzDownloaderX-MOD:如何轻松下载Qobuz高品质音乐到本地

QobuzDownloaderX-MOD:如何轻松下载Qobuz高品质音乐到本地 【免费下载链接】QobuzDownloaderX-MOD Downloads streams directly from Qobuz. Experimental refactoring of QobuzDownloaderX by AiiR 项目地址: https://gitcode.com/gh_mirrors/qo/QobuzDownloader…...

基于Anything V5的Stable Diffusion服务:5分钟部署教程

基于Anything V5的Stable Diffusion服务:5分钟部署教程 1. 快速了解Anything V5 Anything V5是当前最受欢迎的动漫风格生成模型之一,基于Stable Diffusion技术构建。相比前代版本,V5在以下方面有显著提升: 画质增强&#xff1a…...