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

岛屿问题初探(DFS)

0412 算法题

第一题 查找

1.1 题目


1.2 思路

这道题要从编号1开始查询数字,然后输出这个数字第一次出现的编号;若为查找到,返回-1;
为了降低其时间复杂度,我们可以采用二分法进行查找,因为要找到其第一次出现的编号,所以我们优先以收缩其右边界的结果为最终答案。
这里注意以下标对应的数字作为左右端点,这样确保每个数字都是要查找的数字,即结果是有效的。
while循环结束后,验证一下结果。若等于,输出对应ans;若不等于,输出-1。

1.3 完整代码

#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,m;cin>>n>>m;vector<int>a(n);intmid,ans=1,q;for(inti=0;i<n;i++){cin>>a[i];}for(inti=0;i<m;i++){cin>>q;intleft=0,right=n-1;while(left<=right){mid=(left+right)/2;if(a[mid]>=q){ans=mid+1;right=mid-1;}else{left=mid+1;}}if(a[ans-1]!=q){cout<<"-1 ";}else{cout<<ans<<" ";}}return0;}

第二题 孤岛计数

2.1 题目



2.2 思路

这道题,我们要寻找孤岛,即他的上下左右都是水;我们先定义一个dfs函数,即当我们找到了一个未被访问过的孤岛时,我们要使用DFS函数去标记它周围的陆地,并对该陆地进行dfs搜索,保证该岛屿被标记彻底。(这个函数是没有return语句的,当周围为水域或该岛屿已被标记过时,他会自动一层一层结束for循环)(注意剪枝优化,若超出当前研究的范围,直接进行跳过当前循环,进入下一次深搜)
在主函数中,我们先将所有孤岛标记为未访问过,然后开始遍历所有岛屿。如果他是陆地且未被访问过,我们就将岛屿该岛屿标记为已访问;并将岛屿数量加一,然后调用深搜函数,将其周围相邻的陆地标记为已访问过。

2.3 完整代码

#include<iostream>#include<vector>usingnamespacestd;intdir[4][2]={0,1,1,0,-1,0,0,-1};voiddfs(constvector<vector<int>>&grid,vector<vector<bool>>&visited,intx,inty){for(inti=0;i<4;i++){intnextx=x+dir[i][0];intnexty=y+dir[i][1];if(nextx<0||nextx>=grid.size()||nexty<0||nexty>=grid[0].size())continue;if(!visited[nextx][nexty]&&grid[nextx][nexty]==1){visited[nextx][nexty]=true;dfs(grid,visited,nextx,nexty);}}}intmain(){intn,m;cin>>n>>m;vector<vector<int>>grid(n,vector<int>(m,0));for(inti=0;i<n;i++){for(intj=0;j<m;j++){cin>>grid[i][j];}}vector<vector<bool>>visited(n,vector<bool>(m,false));intresult=0;for(inti=0;i<n;i++){for(intj=0;j<m;j++){if(!visited[i][j]&&grid[i][j]==1){visited[i][j]=true;result++;dfs(grid,visited,i,j);}}}cout<<result<<endl;}
http://www.jsqmd.com/news/641214/

相关文章:

  • 2025届学术党必备的六大AI论文工具解析与推荐
  • 不止是碰一碰:聊聊App Clips在餐饮、零售、出行中的5个真实应用场景与设计思考
  • 如何实现多肽抗体的精准定制?
  • ImageToPromptAI:从图像到创意,AI提示词生成器的艺术与科技融合
  • 05-5 目标检测
  • 第二十章 预测性维护:让机器自己说话
  • 基于IEEE 33节点配电网重构的最优流法应用及前后网损电压对比解析,程序采用牛顿-拉夫逊法计...
  • c#Lsit排序
  • 抖音视频批量下载终极指南:3分钟掌握无水印高效下载
  • DeepSeek总结的DuckLake v1.0发版说明
  • 网盘直链下载助手深度解析:八大网盘API直连实战指南与配置避坑手册
  • 三相交错LLC谐振仿真闭环技术研究:包括Y型联接、自均流、软开关、移相与输出电压电流波形分析—...
  • 终极教程:3步配置PotPlayer字幕翻译插件实现免费实时翻译
  • 第十二章:生产部署最佳实践 —— 从开发到上线的完整路径
  • 别再裸奔了!给RuoYi-Vue项目的API穿上‘Base64马甲’:一份完整的请求响应包装指南
  • 英雄联盟终极工具集League Akari完整使用指南:从入门到精通
  • Alienware灯光控制终极指南:轻量级工具完整解决方案
  • Unity Mod Manager:终极模组管理指南,让你的Unity游戏体验翻倍
  • 2026最权威的五大AI论文工具实测分析
  • ArcGIS 10.2 实战:手把手教你将带标注的Shapefile完美转成KML(附注记图层技巧)
  • 嵌入式开发必看:volatile在STM32硬件寄存器操作中的实战应用
  • 3步解锁Cursor Pro功能:突破限制的完整使用指南
  • 李宏毅老师机器学习实战选择题精讲
  • 咸鱼流出海外版一加旗舰65英寸4K120Hz高刷QLED屏幕电视,自带70W杜比全景声音箱,3GB+32GB存储,引4万人次浏览围观!
  • 2026最权威的十大AI论文方案实际效果
  • 学习笔记-中国剩余定理(CRT)
  • 如何将iCloud备份下载到PC/Mac/iPhone?
  • 汽车制动防抱死模型ABS模型。 基于MATLAB/Simulink搭建电动汽车直线abs模型...
  • Oracle 11g新手避坑指南:从安装到实战SQL查询的全流程解析
  • CLIP-GmP-ViT-L-14惊艳效果:脑电图波形→认知状态/异常放电/临床诊断文本