当前位置: 首页 > news >正文

leetcode 130 被围绕的区域

一、题目描述

二、解题思路

整体思路

(1)可以采用深度优先搜索(dfs)来解决这个问题;本题实质上是将全部位于内部的连通块染色为'X',但是靠边缘的连通块不能染色。本题正着来思考比较困难,因为无法判断当前连通块是否是完全被包围的;

(2)正难则反,先处理边界位置,将靠边界的连通块染色为'.',如果再搜索到连通块,则一定为被完全包围的连通块,染色为'X'即可。处理完后再将'.'还原为'O'即可。

具体思路

(1)函数功能:dfs函数用于将(i,j)所在的连通块染色为c(其值赋值为c);

(2)函数体:

<1>将当前位置染色为c,board[i][j]=c;

<2>按照上、右、下、左的顺序从当前位置开始探索。如果(x,y)未越界且board[x][y]=='O',就对(x,y)位置递归调用dfs函数。

三、代码实现

class Solution {int m,n;
public:void solve(vector<vector<char>>& board) {//初始化全局变量m=board.size();n=board[0].size();//先处理边界相邻的连通块for(int i=0;i!=m;i++)for(int j=0;j!=n;j++){if(board[i][j]=='O'){if(i==0||i==m-1)dfs(board,i,j,'.');if(j==0||j==n-1)dfs(board,i,j,'.');}}//处理非边界for(int i=0;i!=m;i++)for(int j=0;j!=n;j++)if(i!=0&&i!=m-1&&j!=0&&j!=n-1&&board[i][j]=='O')dfs(board,i,j,'X');//还原边界相邻的连通块for(int i=0;i!=m;i++)for(int j=0;j!=n;j++)if(board[i][j]=='.')board[i][j]='O';       }int dx[4]={0,1,0,-1};int dy[4]={1,0,-1,0};void dfs(vector<vector<char>>& board,int i,int j,char c){board[i][j]=c;for(int k=0;k!=4;k++){int x=i+dx[k];int y=j+dy[k];if(x>=0&&x<m&&y>=0&&y<n&&board[x][y]=='O')dfs(board,x,y,c);}}
};

http://www.dtcms.com/a/449712.html

相关文章:

  • AiCube图形化程序自动生成【SPI,SPI-DMA,I2C,I2C-DMA】代码,驱动OLED-12864
  • Java 变量类型
  • 怎么修改网站源文件高明网站设计多少钱
  • 第14节-增强表结构-Renaming-columns
  • 网站开发长沙免费国内linux服务器
  • 276-基于Python的爱奇艺视频数据可视化分析系统
  • Kubernetes容器运行时:cri-docker vs containerd
  • 购物网站图片的放大怎么做的wordpress表格布局插件
  • 【Canvas与机械】铜制螺帽
  • HarmonyOS ArkTS 深度解析:装饰器与状态管理机制
  • 关于建设网站的合作合同范本中国住房城乡建设部网站首页
  • 松江新城建设投资有限公司网站电子商务营销策略分析
  • 做零售的外贸网站老薛主机卸载wordpress
  • 【Android】Android 的三种动画(帧动画、View 动画、属性动画)
  • 南阳提高网站排名做网站租服务器多少钱
  • Dify本地初始化后安装模型供应商瞬间失败控制台报错401
  • Prometheus接入“飞书“实现自动化告警
  • 现在asp做网站网站改版后百度不收录
  • 做外贸要做什么网站搭建一个网站教程
  • 织梦做的网站怎么会被黑建设项目环评在什么网站公示
  • Python @装饰器用法详解
  • 模电基础:差分放大电路
  • SSM--day2--Spring(二)--核心容器注解开发Spring整合
  • 正规的装饰行业网站建设公司北京新浪网站制作公司
  • Verilog可综合电路设计:重要语法细节指南
  • 力扣hot100做题整理(41-50)
  • 大连模板网站制作公司电话创业平台有哪些
  • 实战指南:文生图模型 Animagine XL 4.0
  • Linux中fcntl系统调用的实现
  • 网站搭建大型公司框架网站模板