算法——矩阵,被围绕的区域

news2024/11/27 4:40:10

. - 力扣(LeetCode)

最开始也是考虑使用dfs,对于矩阵中的每个点,如果能到达边界的O,则跳过继续dfs。否则如果上下左右四个方向都无法到达边界的O,则说明当前的无法到达,在一个set中记录他的行数列数。

最后对每个记录的点标记为X即可。

但是有问题,首先可能会出现永久递归无法跳出来。如果使用父节点记录当前节点的前一个节点,则如果父节点恰好通往边界O,会导致错误。使用visited来记录状态也不行。

应该反向思维,从每个边界O出发dfs。

思路:对于边界上的每一个点进行dfs。如果当前点为X则直接跳过。如果当前点为O,则把O该为A,继续dfs。

使用A来记录从边界上的O所能够到达的点。

遍历完之后,再把矩阵中的O改为X,表示未与边界O相连。把矩阵中的A该为O,表示与边界相连的O,不变。

注意dfs函数中,如果发现不是X不能直接else,而要判断是不是为O,为O才继续dfs。

如果不这样的话当前为A也会继续dfs,导致永远无法停止的递归。

class Solution {
public:

    void dfs(vector<vector<char>>& board,int row,int col)
    {
        if(board[row][col]=='X')return;
        else if(board[row][col]=='O')
        {
            board[row][col]='A';
            if(row>0)dfs(board,row-1,col);
            if(row<board.size()-1)dfs(board,row+1,col);
            if(col>0)dfs(board,row,col-1);
            if(col<board[0].size()-1)dfs(board,row,col+1);
        }
    }
    void solve(vector<vector<char>>& board) {
        for(int i=0;i<board.size();i++)
        {
            dfs(board,i,0);
            dfs(board,i,board[0].size()-1);
        }
        for(int i=1;i<board[0].size()-1;i++)
        {
            dfs(board,0,i);
            dfs(board,board.size()-1,i);
        }
        for(int i=0;i<board.size();i++)
        {
            for(int j=0;j<board[0].size();j++)
            {
                if(board[i][j]=='O')board[i][j]='X';
                else if(board[i][j]=='A')board[i][j]='O';
            }
        }
    }
};

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

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

相关文章

聚焦后成本时代赢销之道 纷享销客2024西北客户大会西安成功举办

纷享销客2024年西北客户大会西安站成功举办&#xff01;此次大会以《后成本时代的赢销之道》为主题&#xff0c;吸引了百余位客户及合作伙伴参会。 纷享销客创始人兼CEO罗旭发表演讲&#xff0c;呼吁一起凝心聚力&#xff0c;共创未来。纷享销客产品副总裁&制造行业中心总…

扫地机器人(蓝桥杯)

文章目录 扫地机器人题目描述解题思路二分贪心 扫地机器人 题目描述 小明公司的办公区有一条长长的走廊&#xff0c;由 N 个方格区域组成&#xff0c;如下图所 示。 走廊内部署了 K 台扫地机器人&#xff0c;其中第 i 台在第 Ai 个方格区域中。已知扫地机器人每分钟可以移动…

Python 自学(九) 之异常处理,文件及目录操作

目录 1. try ... except ... else ... finally 排列 P231 2. write, read, seek, readline, readlines 基本文件操作 P245 3. os模块 基本目录操作 P249 4. os.path 模块 复杂目录操作 P250 5. os 模块 高…

YoloV8改进策略:BackBone改进|GCNet(独家原创)|附结构图

摘要 本文使用GCNet注意力改进YoloV8,在YoloV8的主干中加入GCNet实现涨点。改进方法简单易用&#xff0c;欢迎大家使用&#xff01; 论文:《GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond》 非局部网络&#xff08;NLNet&#xff09;通过为每个查…

郭天祥新概念51单片机(第四期读书笔记)

时钟周期、状态周期、机器周期、指令周期与晶振频率之间的关系 1、晶振频率与脉冲的关系 假设单片机的晶振频率是12MHz&#xff0c;那么它的一个脉冲为1/12微秒&#xff1b;晶振单位时间发出的脉冲则为&#xff1a; 12 ∗ 1 0 6 12*10^6 12∗106。 假设单片机的晶振频率是4MH…

通过IP定位准确地址:原理、应用与局限性

在数字化时代&#xff0c;IP地址不仅是网络设备的标识符&#xff0c;同时也承载着地理位置信息。通过IP定位技术&#xff0c;我们可以根据IP地址获取到相应的地理位置信息&#xff0c;这在网络安全、数据分析、广告推送等领域有着广泛的应用。虎观代理将深入探讨通过IP定位准确…

Oracle EBS AR接口和OM销售订单单价为空数据修复

最近,用户使用客制化Web ADI 批量导入销售订单行功能,把销售订单行的单价更新成空值,直到发运确认以后,财务与客户对帐才发现大量销售订单的单价空,同时我们检查AR接口发现销售订单的单价和金额均为空。 前提条件 采用PAC成本方式具体问题症状 销售订单行的单价为空 Path:…

Spring面试常见问题

目录 1、为什么要用Spring框架&#xff1f;2、有了spring为什么又出现了 springboot&#xff1f;3、springboot出现后为什么又出现了spring cloud&#xff1f;4、SpringBoot自动配置&#xff08;重点&#xff09;5、SpringBoot启动流程&#xff08;重点&#xff09;6、简单谈一…

Latex绘制多行多TSNE列子图

Latex绘制多行多列TSNE子图 问题描述解决办法 问题描述 写论文需要绘制TSNE可视化图像。 解决办法 代码如下 \usepackage{subfigure}\begin{figure*}\centering\small\subfigure[aaa]{\includegraphics[width0.18\textwidth]{Figure/MFPT_v5_train_tsne_user0_bs0.png}}\su…

生态系统服务功能社会价值评估:当量因子法、InVEST、SolVES模型等多技术融合的探索与实践

当量因子法是将生态系统服务功能分类, 以可量化的标准构建不同类型生态系统各种服务功能的价值当量, 结合生态系统的分布面积进行评估,该方法数据量少, 较为直观易用, 适用于区域和全球尺度生态系统服务价值的评估。基于GIS平台的InVEST模型以空间数据为基础&#xff0c;量化多…

gin源码分析(1)--初始化中间件,路由组与路由树

目标 关于gin.Default()&#xff0c;gin.New()&#xff0c;gin.Use()group与子group之间的关系&#xff0c;多group与middleware之间关系中间件的类型&#xff0c;全局&#xff0c;group&#xff0c;get&#xff0c;不同类型的中间件什么时候执行。中间件 next 和abort行为如何…

代码+视频,手动绘制logistic回归预测模型校准曲线(Calibration curve)(1)

校准曲线图表示的是预测值和实际值的差距&#xff0c;作为预测模型的重要部分&#xff0c;目前很多函数能绘制校准曲线。 一般分为两种&#xff0c;一种是通过Hosmer-Lemeshow检验&#xff0c;把P值分为10等分&#xff0c;求出每等分的预测值和实际值的差距. 另外一种是calibra…

vue 响应式原理 Object.defineProperty(obj,‘属性名A‘,options);

目录 self简单讲解1. 视图影响数据2. 数据影响视图3. 视图数据双向影响页面展示 百度 self 简单讲解 get和set方法是ES5中提供的&#xff0c;因为是方法&#xff0c;所以可以进行判断&#xff0c;get 一般是要通过 return 返回的&#xff1b;而 set 是设置&#xff0c;不用返回…

回收站删除的文件在哪里?专业恢复方法分享(最新版)

“我很想知道我从回收站删除的文件被保存在哪里了呢&#xff1f;我刚刚不小心清空了回收站&#xff0c;现在想将它们恢复&#xff0c;应该怎么操作呢&#xff1f;谁能教教我怎么从回收站恢复文件&#xff1f;” 回收站&#xff0c;作为Windows操作系统中的一个重要组件&#xf…

探索AI技术创业的三大机遇

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 方向一&#xff1a;行业解决方案 方向二&#xff1a;智能产品和服务 方向三&#xff1a;教育和培训 结语 我的其他博客 前言…

京东云明修“价格战”,暗渡“政企云”

文&#xff5c;白 鸽 编&#xff5c;王一粟 云计算行业越来越“卷”&#xff0c;一边卷大模型&#xff0c;一边卷价格。 2024 刚一开年&#xff0c;阿里云就宣布百余款产品大降价&#xff0c;最高降幅达55%。在阿里云宣布降价后&#xff0c;京东云紧随其后宣布&#xff0…

80后、90后记忆中的经典软件正在老去,新型平台在悄然崛起

当今软件领域&#xff0c;可谓是瞬息万变。 更新迭代频繁&#xff0c;部分软件稳坐电脑桌面&#xff0c;而有些&#xff0c;则沦为记忆深处的图标&#xff0c;在岁月长河中悄然“凋零”。 试问&#xff0c;那些曾属于80、90后独特记忆的经典软件&#xff0c;你还记得多少&…

银河麒麟操作系统Kylin Linux 离线安装Nginx1.21.5

一、查看操作系统版本号 nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server release V10 (Lance)Kernel: 4.19.90-52.15.v2207.ky10.x86_64Build: Kylin Linux Advanced Server release V10 (SP3) /(Lance)-x86_64-Build20/…

美摄科技AI智能图像矫正解决方案

图像已经成为了企业传播信息、展示产品的重要媒介&#xff0c;在日常拍摄过程中&#xff0c;由于摄影技巧的限制和拍摄环境的复杂多变&#xff0c;许多企业面临着图像内容倾斜、构图效果不佳等挑战&#xff0c;这无疑给企业的形象展示和信息传递带来了不小的困扰。 美摄科技深…

【洛谷 P8700】[蓝桥杯 2019 国 B] 解谜游戏 题解(字符串+映射+周期性)

[蓝桥杯 2019 国 B] 解谜游戏 题目背景 题目描述 小明正在玩一款解谜游戏。谜题由 24 24 24 根塑料棒组成&#xff0c;其中黄色塑料棒 4 4 4 根&#xff0c;红色 8 8 8 根&#xff0c;绿色 12 12 12 根 (后面用 Y 表示黄色、R 表示红色、G 表示绿色)。初始时这些塑料棒排…