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

. - 力扣(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.hqwc.cn/news/586223.html

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

相关文章

LLMs 可能在 2 年内彻底改变金融行业

在艾伦图灵研究所&#xff08;The Alan Turing Institute&#xff09;最新的一项研究中&#xff0c;我们看到了大型语言模型&#xff08;Large Language Models&#xff0c;LLMs&#xff09;的一种可能性。它有望通过检测欺诈行为、生成财务洞察以及自动化客户服务&#xff0c;…

十五.PyEcharts常用视图(1)

目录 十二.PyEcharts常用视图(1) 1-PyEcharts-Faker 2-常用视图 2.1 柱状图 普通柱状图 条形柱状图 堆叠柱状图 象形柱状图 颜色自定义 2.2 折线图 基本折线图 折线图常用属性 面积图 堆叠面积图 2.3 散点图 2.4 双轴图 2.5 饼图 基本饼图 空心饼图 玫瑰图…

机器学习实战18-机器学习中XGBClassifier分类器模型的应用实战,以及XGBClassifier分类器的调优策略

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下机器学习实战18-机器学习中XGBClassifier分类器模型的应用实战&#xff0c;以及XGBClassifier分类器的调优策略。XGBClassifier是基于eXtreme Gradient Boosting (XGBoost)算法的分类器模型&#xff0c;在机器学习领…

热榜!基于jsp+mysql的JSP在线水果销售商城系统设计实现【建议收藏】

热榜&#xff01;基于jspmysql的JSP在线水果销售商城系统设计实现【建议收藏】 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《500套》 欢迎…

人工智能+的广泛应用,已渗透到生活的方方面面

引言 随着科技的不断进步和人工智能技术的快速发展&#xff0c;我们正处于一个人工智能时代。人工智能不仅仅是一种技术&#xff0c;更是一种革命性的变革力量&#xff0c;它正在以前所未有的方式改变着我们的生活和工作方式。 人工智能&#xff08;AI&#xff09;指的是人工…

Go 源码之互斥锁 Mutex

文章目录 一、总结二、源码&#xff08;一&#xff09;Mutex&#xff08;二&#xff09; Lock&#xff08;三&#xff09;Unlock 三、常见问题有劳各位看官 点赞、关注➕收藏 &#xff0c;你们的支持是我最大的动力&#xff01;&#xff01;&#xff01;接下来会不断更新 golan…

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

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

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

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

C++引用与指针比较

引子&#xff1a; 问题&#xff1a; 指针指向变量必须类型一致&#xff08;int对int*类型指针&#xff09;&#xff0c;这样计算&#xff0c;解引用才能得到正确的结果&#xff0c;那引用也是如此吗&#xff1f; 回答&#xff1a;&#xff08;常引用&#xff09; 从语法来说…

【C】leetcode力扣—— 141. 环形链表Ⅰ

目录 141. 环形链表 Ⅰ题目解题思路分析暴力求解&#xff1f;&#xff1f;快慢指针 代码 141. 环形链表 Ⅰ 题目链接: https://leetcode.cn/problems/linked-list-cycle/description/ 题目 题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某…

【基于HTML5的网页设计及应用】——二级级联菜单

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

两分钟1200帧的长视频生成器StreamingT2V来了,代码将开源

两分钟1200帧的长视频生成器StreamingT2V来了&#xff0c;代码将开源 广阔的战场&#xff0c;风暴兵在奔跑…… prompt&#xff1a;Wide shot of battlefield, stormtroopers running… 这段长达 1200 帧的 2 分钟视频来自一个文生视频&#xff08;text-to-video&#xff09…