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

【C++算法】80.BFS解决FloodFill算法_岛屿数量

文章目录

    • 题目链接:
    • 题目描述:
    • 解法
    • C++ 算法代码:


题目链接:

200. 岛屿数量


题目描述:

13575dcac8850c44132575fb428bf9ee


解法

BFS一层层剥开。

题目答案是这么来的。

06c50bdb64c0890919a6209336f73139

注意:要防止之前已经被标记过的元素重复标记,防止拐回去。

可以采用两个方法:

  1. 直接修改原数组(不推荐)

    • 初始元素的上下左右搜寻后,将初始元素置0
  2. 建造一个vis[m][n],和原始数组一样大,里面存放truefalse,标记已经遍历过的数组。设置ret表示岛屿数量。一开始数组里面的初始元素1标为true,后面每标记一次就把对应的1标为true。只要后面遇到的1false就继续。找完了再去找下一个连通块,同时ret++

34f6318c61c94f5ce9405ebf28f85ee3


C++ 算法代码:

class Solution {// 定义四个方向的偏移量:下、上、右、左int dx[4] = {1, -1, 0, 0};int dy[4] = {0, 0, 1, -1};// 标记数组,记录每个位置是否被访问过bool vis[301][301];// 网格的行数和列数int m, n;public:// 主函数:计算岛屿数量int numIslands(vector<vector<char>>& grid) {// 获取网格的行数和列数m = grid.size(), n = grid[0].size();int ret = 0;  // 记录岛屿数量// 遍历整个网格for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {// 如果当前位置是陆地且未被访问过if (grid[i][j] == '1' && !vis[i][j]) {ret++;  // 发现新岛屿bfs(grid, i, j);  // 使用BFS标记该岛屿所有陆地}}}return ret;  // 返回岛屿总数}// BFS辅助函数:标记与(i,j)相连的所有陆地void bfs(vector<vector<char>>& grid, int i, int j) {queue<pair<int, int>> q;  // 创建队列用于BFSq.push({i, j});  // 将起点加入队列vis[i][j] = true;  // 标记为已访问while (q.size()) {auto [a, b] = q.front();  // 取出队首元素q.pop();// 遍历四个方向for (int k = 0; k < 4; k++) {int x = a + dx[k], y = b + dy[k];  // 计算新坐标// 检查新坐标是否有效if (x >= 0 && x < m && y >= 0 && y < n &&  // 边界检查grid[x][y] == '1' &&  // 是陆地!vis[x][y]) {  // 未访问过q.push({x, y});  // 加入队列vis[x][y] = true;  // 标记为已访问}}}}
};
http://www.xdnf.cn/news/16532.html

相关文章:

  • 符号计算与算法实践|使用Maple教授​​群论​​和​​图论​​课程
  • 20250729使用WPS打开xlsx格式的电子表格时候隐藏显示fx的编辑栏的方法
  • 【数据可视化-74】电信用户流失数据可视化分析:Python + Pyecharts 炫酷大屏(含完整的数据,代码)
  • 如何在Linux系统下进行C语言程序的编写和debug测试
  • 建筑兔零基础python自学记录114|正则表达式(1)-18
  • 15-C语言:第15~16天笔记
  • JSON解析
  • 力扣刷题(第一百零二天)
  • BitMart 启动中文品牌“币市”:引领加密资产本地化发展新篇章
  • 闪测影像测量软件见证工业美学中的精密制造-VisionX轮廓度评价
  • Node.js 内置模块
  • 【Mac版】Linux 入门命令行快捷键+联想记忆
  • Qt 移动应用界面设计原则
  • 2025北京师范大学数学分析考研试题
  • Java把word转HTML格式
  • 《从HTTP到IP证书:网络身份验证的下一站革命》
  • 偏二甲肼气体浓度报警控制系统
  • Transformer实战——BERT模型详解与实现
  • <RT1176系列12>DMAMUX入门级应用和DMAMUX MAP表
  • STM32项目分享:智能厨房安全系统(机智云)
  • day064-kodbox接入对象存储与配置负载均衡
  • 并发安全之锁机制一
  • LLM Landscape:2025年大语言模型概览
  • 电子电路原理学习笔记---第4章二极管电路---第3天
  • Python全栈项目--基于深度学习的视频内容分析系统
  • Python与Mysql
  • C++算法实例精讲
  • 分布式微服务--核心组件与架构关系(一)
  • 深度研究——OpenAI Researcher Agent(使用OpenAI Agents SDK)
  • Mac查看本机ip地址