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

【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.dtcms.com/a/304440.html

相关文章:

  • 数据结构 排序(2)---选择排序
  • 【WRF工具】服务器中安装编译GrADS
  • 组件调用传值、调用函数
  • 信息技术发展与区块链的崛起:深度解析与未来展望
  • Vulkan入门教程 | 第二部分:创建实例
  • 0基礎網站開發技術教學(一) --(前端篇)--
  • LeetCode 11 - 盛最多水的容器
  • 力扣面试150(43/150)
  • 3D 网上展厅,到底是什么?​
  • Radash.js 现代化JavaScript实用工具库详解 – 轻量级Lodash替代方案
  • 如何在Windows操作系统上通过conda 安装 MDAnalysis
  • TDengine 中 TDgpt 异常检测的数据密度算法
  • Qt小技巧 QStandardPaths详解
  • 【机器学习深度学习】DeepSpeed框架:高效分布式训练的开源利器
  • 车载诊断架构 --- 关于诊断时间参数P4的浅析
  • 【Spring Boot 快速入门】三、分层解耦
  • XGBoost分类预测+特征贡献SHAP分析,通过特征贡献分析增强模型透明度,Matlab代码实现,引入SHAP方法打破黑箱限制,提供全局及局部双重解释视角
  • 机器学习 线性回归算法及案例实现
  • RESTful API开发指南:使用Spring Boot构建企业级接口
  • x86_64汇编
  • 微信小程序私密消息
  • 实习日志111
  • ElementUI表格 el-table实现自动循环滚动
  • Rust:高效错误处理工具 anyhow
  • 大文档免费翻译方法分享
  • AbMole小课堂丨Blasticidin S(杀稻瘟菌素S)在构建稳转株、抗肿瘤、抗植物病害的跨界应用
  • 6、微服务架构常用十种设计模式
  • 随缘玩 一: 代理模式
  • 算法导论核心代码精粹
  • USRP X440 和USRP X410 直接RF采样架构的优势