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

力扣HOT100(34)图论-岛屿数量

方法一深度优先搜索DFS面试首选1. 核心思路我们把网格看作一个无向图每个1是一个顶点上下左右相邻的1之间有边相连解题步骤遍历整个网格遇到1说明发现了新岛屿岛屿数 1以这个1为起点进行 DFS 遍历把当前1改成0标记为已访问避免重复统计递归遍历它的上下左右四个方向遇到1就继续递归一次 DFS 会把整个连通的岛屿全部标记为 0后续遍历不会再遇到这些点最终 DFS 的次数就是岛屿的数量class Solution { public: //写一个深度优先的函数 void dfs(vectorvectorchar grid,int r,int c){ //需要传入的参数是一个矩阵grid 开始的起点的行数和列数 int nr grid.size();//行数 int nc grid[0].size();//列数 grid[r][c] 0;//首先上来把这个位置的点记成0防止下次找到他 //上面的数如果是1那就对这个1进行搜索 if(r-1 0grid[r-1][c] 1) dfs(grid,r-1,c); //下面 if(r1 nrgrid[r1][c] 1) dfs(grid, r 1, c); if (c - 1 0 grid[r][c-1] 1) dfs(grid, r, c - 1); if (c 1 nc grid[r][c1] 1) dfs(grid, r, c 1); } int numIslands(vectorvectorchar grid) { //核心思路利用深度优先搜索法 找到一个1以后就对上下左右进行搜索然后把岛屿数1并把这个1标记为0. int nr grid.size(); if(!nr){ return 0; } int nc grid[0].size(); int num_islands 0;//记录岛屿的数量 for(int r 0;rnr;r){ for(int c 0;cnc;c){ if(grid[r][c] 1){ num_islands; //开始遍历 如果某个位置的数是1那么开始深度搜素 dfs(grid,r,c); } } } return num_islands; } };方法二广度优先搜索BFS无栈溢出风险1. 核心思路和 DFS 逻辑完全等价只是用队列代替递归栈避免大网格下的栈溢出问题遍历网格遇到1岛屿数 1把当前1入队标记为0队列不为空时取出队首节点把它的上下左右四个方向的1入队并标记为0队列为空时当前岛屿遍历完成继续找下一个1class Solution { public: int numIslands(vectorvectorchar grid) { int nr grid.size(); if(!nr) return 0; int nc grid[0].size(); int num_islands 0; for(int r 0;r nr;r){ for(int c 0;cnc;c){ if(grid[r][c] 1){ num_islands; grid[r][c] 0; queuepairint,int neighbors;//创建队列 存pair neighbors.push({r,c});//把该点坐标存进去 while(!neighbors.empty()){ //不为空则循环 auto rc neighbors.front(); neighbors.pop(); int row rc.first, col rc.second; if (row - 1 0 grid[row-1][col] 1) { neighbors.push({row-1, col}); grid[row-1][col] 0; } if (row 1 nr grid[row1][col] 1) { neighbors.push({row1, col}); grid[row1][col] 0; } if (col - 1 0 grid[row][col-1] 1) { neighbors.push({row, col-1}); grid[row][col-1] 0; } if (col 1 nc grid[row][col1] 1) { neighbors.push({row, col1}); grid[row][col1] 0; } } } } } return num_islands; } };
http://www.zskr.cn/news/1409451.html

相关文章:

  • 别再乱选电容了!手把手教你搞定阻容降压电路,从0.47uF到安规X2电容的保姆级选型指南
  • 避坑指南:你的PLS-DA结果可靠吗?聊聊mixOmics包里的scale、logratio与near.zero.var参数设置
  • 基于 HarmonyOS 6.0 的日程备忘应用:时间线组件与任务状态管理详解
  • Taotoken 支持的最新模型更新速度与接入便利性观察
  • 智能电视/投影仪的TOF手势识别遥控方案
  • 大模型下半场:从“模型能力”到“系统能力”,RAG、Agent如何重塑产业竞争格局?
  • 告别虚拟机!用Win11的WSL2深度体验Ubuntu,暗影精灵8实测性能对比
  • 手把手教你用Diskpart命令彻底删除Windows双系统残留的Ubuntu启动项(告别开机GRUB)
  • 如何利用大数据与AI算法模型,重构ToB及知识产权的“获客渠道”?
  • CPT Markets:多维度评测平台透明度与稳定性
  • Forza Mods AIO终极指南:免费解锁《极限竞速》全系列游戏修改功能
  • 如何分辨正宗特产:景区与批发市场选购避坑指南
  • 数据结构作业-6.2哈夫曼树
  • 【开源软件移植】NitroShare 适配鸿蒙 PC 全流程实战 — Qt-OHOS × 手把手移植教程
  • 分数阶微积分导向的离散制造检测数据融合技术【附算法】
  • 程序员3年卡18k?收藏这份AI转型指南,弯道超车迎高薪!
  • 手把手教你用OSX-KVM项目搞定macOS安装镜像(从dmg到iso的完整转换流程)
  • 微电磁力称重传感器温度补偿算法:从硬件局限到软件动态区间补偿
  • 告别龟速下载:用bypy+aria2在Linux服务器上满速搬运百度网盘大文件
  • CUSUM控制图在Python金融风控中的应用:如何用它监测交易策略的失效?
  • 别再重启虚拟机了!详解Linux SCSI总线扫描,让新硬盘秒识别
  • DSM在零延迟仿真中的异常行为分析与解决方案
  • 基于OpenCL的FPGA信号处理:低延迟流水线设计与工程实践
  • 哈夫曼数 。
  • 脑卒中(中风)研究现状、研究思路详细解析
  • 告别零散脚本:在MeterSphere里用‘场景’优雅管理你的模块CRUD接口测试
  • 26个高质量阅读APP书源:新手必备的一键导入完整指南
  • 2026年 宝钢镀锌HC850/1180DHD+Z吉帕钢测评:超强车身用钢的行业标杆与选购推荐 - 品牌企业推荐师(官方)
  • ArcGIS坐标转点常见三大坑:Excel格式、坐标系选错、点顺序乱,附避坑实操
  • Python爬虫遇到InsecureRequestWarning?别慌,这3种方法帮你搞定SSL证书验证警告