当前位置: 首页 > 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.lryc.cn/news/603851.html

相关文章:

  • 《Java 程序设计》第 9 章 - 内部类、枚举和注解
  • 实在智能Agent智能体荣登全球“Go_Global_AI_100”百强榜,中国AI走向世界!
  • STM32——HAL库
  • 什么是EasyVR shield 3?如何设置EasyVR shield 3
  • 大模型应用开发模拟面试
  • 用动态的观点看加锁
  • TCMalloc 内存分配原理简析
  • 2-verilog-基础语法
  • Coze Studio概览(三)--智能体管理
  • sqli-labs通关笔记-第24关 SQL二次注入(单引号闭合)
  • 硬件学习笔记--73 电能表新旧精度等级对应关系
  • debug redis里面的lua脚本
  • Spring Boot 防重放攻击全面指南:原理、方案与最佳实践
  • ElasticSearch 的3种数据迁移方案
  • 在Word和WPS文字中把全角数字全部改为半角
  • Vue2学习-MVVM模型
  • Spring Boot 简单接口角色授权检查实现
  • C++入门知识学习(上)
  • 嵌入式学习日志(十一)
  • css3之三维变换详说
  • SQL Server中的分页查询
  • leetcode热题——螺旋矩阵
  • 第十一天:不定方程求解
  • 镁金属接骨螺钉注册检测:骨科植入安全的科学基石
  • Rust基础-part8-模式匹配、常见集合
  • 亚马逊 Vine 计划:评论生态重构与合规运营策略
  • 学习笔记-中华心法问答系统的性能提升
  • 小孙学变频学习笔记(十二)机械特性的调整 机械特性的改善
  • 想要批量提取视频背景音乐?FFmpeg 和转换器都安排上
  • Day 25:异常处理