每日OJ题_BFS解决FloodFill④_力扣130. 被围绕的区域

目录

力扣130. 被围绕的区域

解析代码


力扣130. 被围绕的区域

130. 被围绕的区域

难度 中等

给你一个 m x n 的矩阵 board ,由若干字符 'X' 和 'O' ,找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。

示例 1:

输入:board = [["X","X","X","X"],["X","O","O","X"],["X","X","O","X"],["X","O","X","X"]]
输出:[["X","X","X","X"],["X","X","X","X"],["X","X","X","X"],["X","O","X","X"]]
解释:被围绕的区间不会存在于边界上,换句话说,任何边界上的 'O' 都不会被填充为 'X'。 任何不在边界上,或不与边界上的 'O' 相连的 'O' 最终都会被填充为 'X'。如果两个元素在水平或垂直方向相邻,则称它们是“相连”的。

示例 2:

输入:board = [["X"]]
输出:[["X"]]

提示:

  • m == board.length
  • n == board[i].length
  • 1 <= m, n <= 200
  • board[i][j] 为 'X' 或 'O'
class Solution {
public:void solve(vector<vector<char>>& board) {}
};

解析代码

         正难则反。 可以先利用 bfs 将与边缘相连的 'O' 区域修改成无关字符,然后重新遍历矩阵,将没有标记过的 'O' 全修改成 'X' 即可,再把无关字符全还原成'O'。

class Solution {int dx[4] = {0, 0, -1, 1};int dy[4] = {1, -1, 0, 0};int m = 0, n = 0;public:void solve(vector<vector<char>>& board) {m = board.size(), n = board[0].size();for(int i = 0; i < n; ++i) // 修改边界的O成无关字符{if(board[0][i] == 'O')bfs(board, 0, i);if(board[m - 1][i] == 'O')bfs(board, m - 1, i);}for(int i = 0; i < m; ++i){if(board[i][0] == 'O')bfs(board, i, 0);if(board[i][n - 1] == 'O')bfs(board, i, n - 1);}for(int i = 0; i < m; ++i) // 把剩下的O全修改成X,R全修改成O{for(int j = 0; j < n; ++j){if(board[i][j] == 'O')board[i][j] = 'X';else if(board[i][j] == 'R')board[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] = 'R';while(!q.empty()){auto [a, b] = q.front();q.pop();for(int i = 0; i < 4;  ++i){int x = a + dx[i], y = b + dy[i];if(x >= 0 && x < m && y >= 0 && y < n && board[x][y] == 'O'){q.push({x, y});board[x][y] = 'R';}}}}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/808264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式: 结构型之外观模式(11)

外观模式概述 外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它为复杂的系统、程序库或框架提供一个简单&#xff08;但有限&#xff09;的接口这种模式的核心理念是隐藏系统的复杂性&#xff0c;仅对外暴露一个简化的接口&#xff0c;使得…

libVLC 视频界面分割

先看看分割后的界面吧&#xff0c;根据分割的数量&#xff0c;来分割视频画面。 其实视频界面分割很简单&#xff0c;看过叠加窗口的这篇文章&#xff0c;不难理解&#xff0c;如何分割。 libVLC 视频窗口上叠加透明窗口-CSDN博客 如果还是不懂的话&#xff0c;我讲解一下原理…

【c++】-对象的初始化-构造函数和析构函数区别联系-总结

对象的初始化 1.构造函数和析构函数 构造函数和析构函数是在类体中说明的两种特殊的成员函数。构造函数的功能是在创建对象时&#xff0c;使用给定的值来将对象初化。析构函数的功能是用来释放一个对象的&#xff0c;在对象删除前&#xff0c;用它来做一些清理工作&#xff0…

原码的除法运算

目录 王道考研ppt&#xff1a; 个人理解&#xff1a; 手算整数的除法&#xff1a; ​编辑 手算二进制的除法&#xff1a; 用机器实现除法&#xff1a; 方法一&#xff1a;恢复余数法 第二种方法&#xff1a;加减交替法 王道考研ppt&#xff1a; 个人理解&#xff1a; 手…

政安晨:【深度学习神经网络基础】(三)—— 激活函数

目录 线性激活函数 阶跃激活函数 S型激活函数 双曲正切激活函数 修正线性单元 Softmax激活函数 偏置扮演什么角色&#xff1f; 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨…

【完全背包求方案数问题】AcWing1023.买书(赋练习题目)

【题目链接】活动 - AcWing 输入样例1&#xff1a; 20输出样例1&#xff1a; 2输入样例2&#xff1a; 15输出样例2&#xff1a; 0输入样例3&#xff1a; 0输出样例3&#xff1a; 1 【代码】 //1023.买书——完全背包问题#include<bits/stdc.h>using namespace st…

IP定位的原理及应用场景

IP定位&#xff0c;即通过IP地址来确定一个设备或用户所在的大致地理位置&#xff0c;是一项在现代网络时代中愈发重要的技术。它广泛应用于网络安全、数据分析、广告投放等多个领域&#xff0c;为人们的生活和工作带来了极大的便利。本文将从IP定位的原理、实现方式、应用场景…

基于springboot的大型商场应急预案管理系统源码数据库

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了大型商场应急预案管理系统的开发全过程。通过分析大型商场应急预案管理系统管理的不足&#xff0c;创建了一个计算机管理大型商场应急预案管理系统的方案。文章…

百度Create AI开发者大会剧透丨用好三大AI神器 ,人人都是开发者

程序员会消失&#xff0c;真的吗&#xff1f;大模型的下一站是什么&#xff1f;开发者的机会在哪里&#xff1f;什么才是最好用的AI应用开发工具&#xff1f;在4月16日举办的2024百度Create AI开发者大会上&#xff0c;百度创始人、董事长兼首席执行官李彦宏将就这些备受瞩目的…

算法刷题day45

目录 引言一、母亲的牛奶二、奶牛回家三、扫雷 引言 今天主要复习了图论里的最短路、 B F S 、 D F S 、 F l o o d F i l l BFS、DFS、Flood\ Fill BFS、DFS、Flood Fill 算法&#xff0c;其实到现在感觉暴搜其实还挺好写的&#xff0c;现在刚好反过来了&#xff0c;不喜欢写…

Vue的学习之旅-part4

Vue的学习之旅-part1 vue的自带指令v-if v-else-if v-else虚拟DOM的复用v-show 与 v-if 的不同之处&#xff1a;v-if v-show各自合适的使用位置&#xff1a; v-for 循环v-for 循环遍历 :key"item" 绑定key&#xff0c;区分循环的内容循环的应用&#xff1a; 前几篇博…

257.二叉树的所有路径

给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 class Solution{public List<String> binaryTreePaths(TreeNode root){List<String> paths new ArrayList<>():c…

单片机蓝牙数据传输刚开始正常然后乱码什么原因

单片机蓝牙数据传输在开始时正常&#xff0c;但随后出现乱码的情况可能由多种原因引起。以下是一些可能的原因及解决方法&#xff1a; 波特率不匹配&#xff1a;单片机与蓝牙模块之间的波特率设置不一致可能导致数据传输错误。确保两者使用的波特率相同&#xff0c;并检查是否…

宏观认知第一篇--AI 是否就是第四次工业革命?

今年春节期间李一舟老师突然爆火&#xff0c;成功晋升为能与 ChatGPT 公司 CEO 齐名的中国 AI 大佬&#xff0c;赚到几个小目标后又火速被封&#xff0c;于是想着有空写篇小文章讲一讲跟普通人切身相关的话题-- AI 是否就是第四次工业革命&#xff1f; “AI 是否就是第四次工业…

【Java核心技术】第4章 对象与类

1 面向对象 2 自定义类 形式&#xff1a; class ClassName { field // 字段 constructor // 构造器&#xff08;构造函数&#xff09; method // 方法 } 如&#xff1a; class Employee {private String name;private double salary;private LocalDate hireDay;public Emp…

“桃花庵主”是我国哪位古代名人的称号?2024年4月12日蚂蚁庄园今日答案

原文来源&#xff1a;蚂蚁庄园今日答案 - 词令 蚂蚁庄园是一款爱心公益游戏&#xff0c;用户可以通过喂养小鸡&#xff0c;产生鸡蛋&#xff0c;并通过捐赠鸡蛋参与公益项目。用户每日完成答题就可以领取鸡饲料&#xff0c;使用鸡饲料喂鸡之后&#xff0c;会可以获得鸡蛋&…

.a和.so库文件是什么?

我们在编译开源代码后&#xff0c;通常会生成.a和.so这两个库文件&#xff0c;这两个文件有什么区别&#xff1f;又如何使用&#xff1f; 在 Linux 中&#xff0c;.a 和 .so 文件都是库文件&#xff0c;但它们有一些区别&#xff1a; 静态库文件&#xff08;.a&#xff09;&am…

全量知识系统 程序详细设计之 原型库(QA百度搜索)

Q1. 今天聊聊全知系统中的原型库设计 全知系统中的原型库设计是一个关键环节&#xff0c;它涉及到系统的整体架构、功能需求、用户体验等多个方面。以下是一些关于全知系统中原型库设计的讨论&#xff1a; 明确设计目标&#xff1a;在设计原型库之前&#xff0c;需要明确设计…

fixed固定定位transofrm失效的解决

<div class"container"><div class"fixed"></div><div class"content"><div class"centered">Centered Content</div></div></div> 固定定位&#xff08;position: fixed&#xff0…

docker安装Neo4j

1、创建文件夹用作目录映射 mkdir -p /mydata/neo4j/{conf,data,import,logs,plugins} chmod -R 777 /mydata/neo4j/{conf,data,import,logs,plugins}2、拉去镜像 docker pull neo4j3、启动容器 docker run \ -d --name neo4j \ -p 7474:7474 -p 7687:7687 \ -v /mydata/neo…