求解环绕的区域问题

LeetCode 被围绕的区域 给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。 找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 示例: 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'... 阅读详情

前言

	简单问题,写的不好,大佬见谅.
	如有疏漏,恳请指正,小编垂首.

问题描述:

给定"X",“O"的面板,要求将所有被"x"包围的"O"都转化为"X”.

问题解析:

  • 正难则反
  • 未被环绕的’O’一定有一个与整个棋盘的边界接壤
  • 以边界的O为起点,向其他方向dfs遍历,遇到’X’和边界停止
  • 所有被遍历到的都为’O
  • 未被遍历的改为X

实现代码:

代码如下(示例):

#include<cstdio>
char c[10][10];
int h, l;//高,宽
void dfs(int i, int j) {
	if (i >= 0 && i < h && j >= 0 && j < l && c[i][j]=='O') {//遇到O找上下左右
		c[i][j] = 'A';//改为'A'避免重复遍历
		dfs(i - 1, j);//left
		dfs(i + 1, j);//right
		dfs(i, j - 1);//on
		dfs(i, j + 1);//down
	}
	return;//遇到边界,直接返回
}

void solve() {
	for (int i = 0; i < h; i++) {//由边界向内找"O",必然是未被环绕的
		dfs(i, 0);//第一列
		dfs(i, l - 1);//最后一列
	}

	for (int j = 1; j < l; j++) {
		dfs(0, j);//第一行
		dfs(h - 1, j);//最后一行
	}

	for (int i = 0; i < h; i++) {
		for (int j = 0; j < l; j++) {
			if (c[i][j]=='A')c[i][j] = 'O';
			else c[i][j] = 'X';
		}
	}
}

int main()
{
	scanf_s("%d%d", &h, &l);
	getchar();
	for (int i = 0; i < h; i++) {
		for (int j = 0; j < l; j++) {
			scanf_s("%c", &c[i][j]);
		}getchar();
	}
	solve();
	printf("\n");
	for (int i = 0; i < h; i++) {
		printf("%s\n", c[i]);
	}
	return 0;
}

测试案例:

在这里插入图片描述

总结

正难则反

Leetcode 中级 被围绕区域 C++,C指针实现 问题描述 给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 示例: 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’ 都不会被填充为 ... 阅读详情

相关推荐

Kalibr标定避坑指南:如何用AprilGrid板快速完成双目IMU标定

本文详细介绍了使用AprilGrid板进行Kalibr双目IMU联合标定的实战技巧,包括标定工具选型、数据采集优化、标定流程及结果验证。通过AprilGrid板的唯一标识性和抗遮挡优势,结合IMU静止标定和运动激励设计,显著提升标定精度。文章还提供了常见报错处理和高级优化技巧,帮助开发者高效完成传感器标定。

sunny的博客 282

[LeetCode]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"

张小猪的家 363

告别GitHub!手把手教你用Gitblit在Windows 10上搭建私人局域网Git服务器(附SourceTree配置)

本文详细介绍了如何在Windows 10环境下使用Gitblit搭建私有Git服务器,实现局域网内高效代码协作。通过轻量级的Gitblit解决方案,开发者可以享受数据完全自主、离线可用性和局域网高速访问等优势。文章包含从环境准备、安装部署到SourceTree配置的全流程指南,特别适合金融、医疗等敏感行业团队使用。

weixin_30430169的博客 283

被围绕的区域

给定一个二维的矩阵,包含'X'和'O'(字母 O)。 找到所有被'X'围绕的区域,并将这些区域里所有的'O'用'X'填充。 示例: 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 解释: 被围绕的区间不会存在于边界上,换句话说,任何边界上的'...

leaf_scar的博客 376

【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南

【WRF-Urban】使用 NUDAPT 数据集与 BEP/BEP_BEM 方案的 WRF 配置指南

WW、forever的博客 1964

使用 MATLAB/Simulink 搭建一个 无人机群间数据交换与协同控制仿真系统

本文提供了一份详细的Simulink无人机群协同控制仿真教程。主要内容包括:无人机群系统架构设计(去中心化网络、通信分层)、三维运动建模、空-空通信链路实现(距离判断、无线信道)、分布式Consensus控制算法开发,以及性能评估指标设定。教程采用模块化设计思路,通过ModelReference构建多无人机并行模型,并给出了MATLAB函数实现关键算法。最后展示了预期仿真结果(收敛时间<15s、位置偏差<2m)和进阶应用方向(编队飞行、AI协同等),帮助读者掌握群体智能系统的建模与仿真方法。

amy_mhd的博客 157

130. 被围绕的区域(C++)---DFS解题

题目详情 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。 示例: 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'。如果两个

努力学习的DS 1025

ICC2: 如何让CTS指定pin多长指定长度

这里create_clock不需要写到sdc里,在脚本里写就行,需要注意的是脚本里存在remove_clock_tree的话,add_buffer就要放remove_clock_tree后面,或者给guide buffer设don't touch也行。跟innovus的操作逻辑一样,如果要让tree上的某一点长长,要先考虑这个点后面的clock tree能正常balance。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?-5意味着长长5ns,相反正值意味着做短。

m0_61544122的博客 680

算法设计与分析第四章(蛮力法) 课后习题答案(c++)

该文章是算法设计与分析(第二版)中各章的课后习题 主编 : 李春葆 在本文中,主要是对该书第四章-蛮力法章节中的上机实验题以及在线编程题进行代码解答。

qq_46664080的博客 2290

华为OD机试真题 新系统2026-04-01 Java&Go【计算数列位置N的值】

如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;1、输入M、N两个数,则按照以下规则形成一个数列;两个整数,用逗号分割,分别表示M和N。一个整数,表示数列第N个位置上的数值。2、数列的前M个元素的值为1到M;请计算该数列第N个位置上的数值。N取值范围:1<= N<=50。M取值范围:3<=M<=10。

MISAYAONE的博客 2065

01-系统技术架构师必备——软件架构设计基础与核心概念

摘要 本文系统阐述了软件架构设计的核心概念与方法论,重点涵盖以下内容:1)软件架构的四大要素(构件、连接件、约束、配置)及其边界划分;2)Garlan & Shaw五大架构风格(数据流、调用/返回、独立构件、虚拟机、仓库)的典型应用场景;3)基于电商库存系统的架构选型实战案例,展示如何根据业务需求(高并发、最终一致性)选择事件驱动架构配合Saga模式;4)介绍ABSD、DSSA等主流架构方法论及ISO/IEEE标准体系。文章融合金融与互联网领域的架构实践经验,为技术架构师提供系统性的知识框架和决策参考。

模界 | AI工程化实践者 182

LeetCode130. 被围绕的区域

题目给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。示例: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'。 任何...

qq_38595487的博客 1945

STM32嵌入式标准化封装五层架构设计与工程实践

在嵌入式系统开发中,代码封装是保障可维护性、可复用性与可靠性的核心工程能力。其本质是通过分层抽象(硬件抽象层→设备驱动层→应用逻辑层)解耦硬件依赖与业务逻辑,实现跨芯片移植、多任务安全及确定性实时响应。关键技术包括HAL库重构以消除硬编码初始化、驱动层提供同步/异步/事件驱动三类UART接口、中断优先级矩阵管理确保响应确定性、双阶段时钟配置兼顾启动鲁棒性与运行能效,以及面向Modbus等工业协议的语义化API封装。这些实践直击STM32项目中引脚变更难、HAL裸调风险高、中断处理不安全、时钟配置僵化等典型痛

weixin_35019679的博客 68

游览珠海校区

游览珠海校区 时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte 总提交:2            测试通过:2 描述        The 1^st Annual Guangdong Collegiate Programming Contest (GDCPC) was held in Zhuhai Campus of Zh

Memory 1218

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【并查集】B002_被环绕的区域(并查集 | DFS | BFS)

一、题目描述 Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'. A region is captured by flipping all 'O's into 'X's in that surrounded region. Example: X X X X ...

无敌兔0x01 569

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

环绕区域

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33725270的博客 666

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【搜索】B001_LC_被环绕的区域(预处理边界上以及与边界上相连的 O)

一、题目 Given a 2D board containing ‘X’ and ‘O’ (the letter O), capture all regions surrounded by ‘X’. A region is captured by flipping all 'O’s into 'X’s in that surrounded region. Example: X X X X X O...

无敌兔0x01 471

leetcode 130. 被围绕的区域

从边缘的O开始深搜,走过的地方置为# 从头开始,把O的地方变成X 把#的地方变成O #include <iostream> #include <vector> using namespace std; #define debug(x) cout<<#x<<": "<<x<<endl; class Solution { ...

DUT_LYH 224

130. Surrounded Regions(周围区域问题 广度优先)(代码未完成!!)

Given a 2D board containing'X'and'O'(theletterO), capture all regions surrounded by'X'. A region is captured by flipping all'O's into'X's in that surrounded region. For example...

anqiu4023的博客 160

130. 被围绕的区域 DFS

130. 被围绕的区域 难度:中等 题目描述 解题思路 这道题的思路有点巧妙( •̀ ω •́ )y 因为边界上的O和它相邻的O一定不会被标记,所以可以用逆向思维,先把所有边界上的O和和它相邻的O都标记出来,最后把标记还原,没标记过的变成X 1、DFS /* * 130. 被围绕的区域 * 2020/7/18 */ public void solve(char[][] board) { int m = board.length;

hh155715的博客 142

LeetCode-130-被围绕的区域-C语言

/* * Notes: * similar with No.200 Number of Islands, suggest that you'd better finish No.200 firstly * and than go back to this one. you will understand it easily. * */ void set_bundary(char *...

SFFS 703

算法爱好者——被围绕的区域 ? 待解决

给一个二维的矩阵,包含 ‘X’ 和 ‘O’,写一个函数找到找到所有被 ‘X’ 围绕的区域,并用 ‘X’ 填充满。格式:第一行输入一个由 ‘X’ 和 ‘O’ 的数组,最后输出用 ‘X’ 填充完的数组。样例输入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思路:

wjheha的博客 409

被围绕的区域(DFS实现)

题目 给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 示例: 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’。如果两个元素在水平或垂直

weixin_43857345的博客 267

leetcode130. 被围绕的区域(Python3、c++)

文章目录leetcode130. 被围绕的区域方法:深度优先搜索DFS思路:代码:Python3:cpp:结果: leetcode130. 被围绕的区域 给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。 找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。 示例: 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 解释: 被围绕的区间不会存在于边界上,换句话说,

weixin_43422466的博客 371

455,DFS和BFS解被围绕的区域

想了解更多数据结构以及算法题,可以关注微信公众号“数据结构和算法”,每天一题为你精彩解答。也可以扫描下面的二维码关注 给定一个二维的矩阵,包含’X’和’O’(字母 O)。 找到所有被’X’围绕的区域,并将这些区域里所有的’O’用’X’填充。 示例: 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’

数据结构和算法 543

130. 被围绕的区域

思路 首先理解题目: 以下两种情况下的‘O ’不会被填充为‘X’: ‘O ’在边界上的 与边界上的‘O’相连的‘O’ 故可以先对边界上的‘O’可进行深度搜索,将与之相连的‘O’全部换为‘-’,此时剩下的‘O’均为可以放心的填充为‘X’,再将‘-’换回‘O’。 class Solution(object): def solve(self, board): if len(...

chandelierds的博客 224
上一篇: 守望者的逃离---动态规划、贪心法
下一篇: 归并排序_分治法递归练习
twfplayer
博客等级 码龄6年 747粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

twfplayer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值