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

【C++算法】82.BFS解决FloodFill算法_被围绕的区域

文章目录

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


题目链接:

130. 被围绕的区域


题目描述:

f8ddd3dda7f80be6e605cb1d683b6e67


解法

BFS一层层剥开。


C++ 算法代码:

class Solution {// 定义四个方向的偏移量:右、左、下、上int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};// 网格的行数和列数int m, n;public:// 主函数:处理被'X'包围的区域void solve(vector<vector<char>>& board) {// 获取网格的行数和列数m = board.size(), n = board[0].size();// 1. 处理四条边上的'O'及其连通区域// 上边界for (int j = 0; j < n; j++) {if (board[0][j] == 'O')bfs(board, 0, j);  // 标记为'.'}// 下边界for (int j = 0; j < n; j++) {if (board[m - 1][j] == 'O')bfs(board, m - 1, j);  // 标记为'.'}// 左边界for (int i = 0; i < m; i++) {if (board[i][0] == 'O')bfs(board, i, 0);  // 标记为'.'}// 右边界for (int i = 0; i < m; i++) {if (board[i][n - 1] == 'O')bfs(board, i, n - 1);  // 标记为'.'}// 2. 遍历整个网格,进行最终处理for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (board[i][j] == 'O') {// 这些'O'是被'X'包围的,需要改为'X'board[i][j] = 'X';} else if (board[i][j] == '.') {// 这些'.'是之前从边界'O'扩展来的,恢复为'O'board[i][j] = 'O';}}}}// BFS辅助函数:将与(i,j)相连的所有'O'标记为'.'void bfs(vector<vector<char>>& board, int i, int j) {queue<pair<int, int>> q;q.push({i, j});board[i][j] = '.';  // 标记为'.',表示这个位置不会被'X'包围while (!q.empty()) {auto [a, b] = q.front();q.pop();// 遍历四个方向for (int k = 0; k < 4; k++) {int x = a + dx[k], y = b + dy[k];// 检查新坐标是否在网格内且为'O'if (x >= 0 && x < m && y >= 0 && y < n && board[x][y] == 'O') {q.push({x, y});board[x][y] = '.';  // 标记为'.'}}}}
};
http://www.dtcms.com/a/304335.html

相关文章:

  • 驱动(platform)
  • 青少年软件编程图形化Scratch等级考试试卷(三级)2025年6月
  • CentOS Nginx 1.13.9 部署文档
  • Elasticsearch索引设计与性能优化实战指南
  • 使用Y modem协议进行瑞萨RX MCU OTA数据传输
  • vim的`:q!` 与 `ZQ` 笔记250729
  • 数据结构之时间复杂度
  • 【绘制图像轮廓】——图像预处理(OpenCV)
  • 互联网医院系统包含哪些优势?
  • taro+react重新给userInfo赋值后,获取的用户信息还是老用户信息
  • 搭建一个自定义的 React 图标库
  • 设计模式---单例
  • 测试用例的编写:让测试用例的编写条理起来
  • Redis学习09-AOF-混合持久化
  • iPhone 神级功能,3D Touch 回归!!!
  • 对象的创建过程
  • c++-list
  • Python 程序设计讲义(29):字符串的处理方法——大小写转换
  • 【C++算法】83.BFS解决最短路径问题_最短路径问题简介
  • Redis学习07-Redis的过期策略
  • (1-7-5) Mysql 对 数据的基本操作
  • MC0241防火墙
  • Object.freeze() 深度解析:不可变性的实现与实战指南
  • 道路坑洞检测数据集介绍8300张图片-智能道路巡检系统 车载安全监测设备 城市基础设施管理
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-文章评论量分析实现
  • 从零到一:Django图书管理系统完整开发实战指南
  • 开源数据库PostgreSQL专家技术
  • 从视觉到现实:掌握计算机视觉技术学习路线的十大步骤
  • 在 PolkaVM 上用 Rust 实现 ERC20 合约的全流程开发指南
  • 三维扫描相机:工业自动化的智慧之眼——迁移科技赋能智能制造新纪元