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

相关文章:

  • 基于SpringBoot和Leaflet集成在线天气服务的区县当前天气WebGIS实战
  • 【CSS】盒子类型
  • Linux网络:多路转接 select
  • 7月29号打卡
  • 个人健康管理小程序(消息订阅、Echarts图形化分析)
  • C# CAN通信上位机系统设计与实现
  • Hyperchain安全与隐私机制详解
  • Prometheus + Grafana + Micrometer 监控方案详解
  • CodeRush AI 助手进驻 Visual Studio:AiGen/AiFind 亮相(三)
  • 【数据可视化-74】电信用户流失数据可视化分析:Python + Pyecharts 炫酷大屏(含完整的数据,代码)
  • Visual Studio的妙用
  • 【22】C# 窗体应用WinForm ——定时器Timer属性、方法、实例应用,定时切换画面
  • 从github同步新项目的两次挫折-2025.7.29
  • 工业补贴携手华为云,重塑汽车零部件供应链管理新趋势
  • 设计模式:状态模式 State
  • Ragflow 文档处理深度解析:从解析到存储的完整流程
  • Go语言新手村:轻松理解变量、常量和枚举用法
  • [工具类] 分片上传下载,MD5校验
  • 【Spring Boot 快速入门】三、分层解耦
  • 飞算JavaAI:数据库插件安装与表结构设计的智能革命
  • 室内环境具身智能语义建图研究综述:进展、挑战与未来方向
  • SpringBoot整合RocketMQ(阿里云ONS)
  • GC8870 3.6A 刷式直流电机驱动器深度解析——规格、应用与实测数据全指南
  • 网络安全的变革:深入洞察 Web3 与传统网络模型
  • 【Linux我做主】探秘进程状态
  • 橡胶制品加工:塑造生活的柔韧力量
  • protobuf2.5.0 arm_linux
  • 嵌入向量与向量数据库:AI时代的语义搜索革命
  • 力扣30 天 Pandas 挑战(3)---数据操作
  • 【go】语言的匿名变量如何定义与使用