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

(nice!!!)(LeetCode 面试经典 150 题 ) 130. 被围绕的区域(深度优先搜索dfs || 广度优先搜索bfs)

题目:130. 被围绕的区域

在这里插入图片描述
在这里插入图片描述

三种解法:
C++版本:采用的是遍历所有元素,如果是’O’,则进行bfs。
JAVA版本:遍历所有边上的元素,并采用额外的状态数组来标记情况
GO版本:遍历所有边上的元素,但是在原数组中进行状态标记。

C++版本:

class Solution {
public:typedef pair<int,int> PII;int fx[4]={0,0,-1,1};int fy[4]={1,-1,0,0};void bfs(int X,int Y,vector<vector<char>>& board,vector<vector<bool>>& sta){//采用广度优先搜索bfsqueue<PII> qu;// 记录当前遍历的所有‘O’vector<PII> v;// 初始化qu.push({X,Y});sta[X][Y]=true;// 判断是否被围住bool flag=true;int n=board.size(),m=board[0].size();// 遍历队列quwhile(qu.size()){PII tmp=qu.front();qu.pop();v.push_back(tmp);// 遍历可能的领居节点for(int i=0;i<4;i++){int x=tmp.first+fx[i];int y=tmp.second+fy[i];if(x<0||y<0||x>=n||y>=m) continue;if(board[x][y]=='X'||sta[x][y]==true) continue;// 如果当前节点为‘O',没遍历过,且在边上,那说明这次bfs遍历的所有'O'都不会被围住if(x==0||x==n-1||y==0||y==m-1){flag=false;}qu.push({x,y});sta[x][y]=true;}}// 没有被围住if(flag==false) return;// 被围住for(auto x:v){board[x.first][x.second]='X';}}void solve(vector<vector<char>>& board) {int n=board.size(),m=board[0].size();// 状态数组vector<vector<bool>> sta(n,vector<bool>(m,false));// 遍历所有元素for(int i=0;i<board.size();i++){for(int j=0;j<board[0].size();j++){// 没有被遍历过,且为‘O',并且不在边上if(sta[i][j]!=true&&board[i][j]=='O'&&i!=0&&j!=0&&i!=n-1&&j!=m-1){bfs(i,j,board,sta);}}}}
};

JAVA版本:

class Solution {void dfs(int x,int y,char[][] board,boolean[][] sta){if(x<0 ||y<0||x>=board.length||y>=board[0].length) return ;// 遍历过if(sta[x][y]==true) return;// 不为‘O'if(board[x][y]=='X') return ;sta[x][y]=true;dfs(x-1,y,board,sta);dfs(x+1,y,board,sta);dfs(x,y+1,board,sta);dfs(x,y-1,board,sta);}public void solve(char[][] board) {int n=board.length,m=board[0].length;// 状态数组boolean[][] sta=new boolean[n][m];// 遍历所有边上的节点for(int j=0;j<m;j++){if(sta[0][j]==false && board[0][j]=='O'){dfs(0,j,board,sta);}if(sta[n-1][j]==false && board[n-1][j]=='O'){dfs(n-1,j,board,sta);}}for(int i=0;i<n;i++){if(sta[i][0]==false && board[i][0]=='O'){dfs(i,0,board,sta);}if(sta[i][m-1]==false && board[i][m-1]=='O'){dfs(i,m-1,board,sta);}}// 将围住的节点都改为‘X’for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(sta[i][j]==false){board[i][j]='X';}}}}
}

GO版本:

func solve(board [][]byte)  {n,m:=len(board),len(board[0])// 遍历所有边上的节点for i:=0;i<n;i++ {dfs(i,0,board)dfs(i,m-1,board)}for j:=0;j<m;j++ {dfs(0,j,board)dfs(n-1,j,board)}for i:=0;i<n;i++ {for j:=0;j<m;j++ {// 没有被围住if board[i][j]=='C' {board[i][j]='O'}else if board[i][j]=='O' {// 被围住board[i][j]='X'}}}
}
func dfs(x,y int,board [][]byte) {if x<0||y<0||x>=len(board)||y>=len(board[0]) || board[x][y]!='O' {return }// 将没有被围住的‘O’都改为‘C'board[x][y]='C'dfs(x-1,y,board);dfs(x+1,y,board);dfs(x,y-1,board);dfs(x,y+1,board);
}

文章转载自:

http://bSHBPr7j.zknxh.cn
http://2neIlIhJ.zknxh.cn
http://ghynhh6P.zknxh.cn
http://IKjLbRVS.zknxh.cn
http://QEHYRysV.zknxh.cn
http://Wdd4ENuP.zknxh.cn
http://YyqnT5MU.zknxh.cn
http://hmLR1kiC.zknxh.cn
http://utU14wqa.zknxh.cn
http://2sCTMNpx.zknxh.cn
http://yMcRSvPu.zknxh.cn
http://no4NFGFg.zknxh.cn
http://vHCgG7QG.zknxh.cn
http://TjxFfJOr.zknxh.cn
http://DJ5Bpxoq.zknxh.cn
http://2C73cmUm.zknxh.cn
http://BqYCBn2f.zknxh.cn
http://lG2I9YOb.zknxh.cn
http://1PvDOREP.zknxh.cn
http://W3knlxgm.zknxh.cn
http://Ly1Jp5PT.zknxh.cn
http://Gq9f3SRD.zknxh.cn
http://VgKGvDwa.zknxh.cn
http://aBlyili2.zknxh.cn
http://3WM3tZbD.zknxh.cn
http://jqiQHN67.zknxh.cn
http://oWEuectp.zknxh.cn
http://ppCE7IrJ.zknxh.cn
http://HuoVLuEC.zknxh.cn
http://kLXTVIgp.zknxh.cn
http://www.dtcms.com/a/371216.html

相关文章:

  • 虚拟化技术
  • 【74页PPT】MES简介(附下载方式)
  • 基于Pygame的六边形战术推演系统深度剖析——从数据结构到3D渲染的完整实现(附完整代码)
  • 强化学习入门:从零开始实现DDQN
  • 开启Python之路,第一节学习大纲-从入门到进阶
  • 单词分析与助记之数据建表(以production为例)
  • 【温室气体数据集】亚洲地区长期空气污染物和温室气体排放数据 REAS
  • 高精度地图
  • 美陆军启用数字仿真与分析中心;首次测试AI空战指挥官“星智“系统;五角大楼计划削减关键技术清单
  • 《秦时明月》系列经典语录分享
  • 《用 Python 构建并发 API 爬虫:从基础到高性能实战》
  • 语义切片技术深度解析:重新定义RAG时代的文本处理范式
  • LeetCode - 1089. 复写零
  • C++ 小游戏:拍桌子
  • 魅族 Note 16 解锁 BL 及 Root 官方刷机包下载Flyme 12.0.1.5A 型号 M521Q
  • AI(学习笔记第七课) 使用langchain进行文本切割
  • Coze平台指南(3):核心功能-创建智能体与设计角色
  • 单例模式(巨通俗易懂)普通单例,懒汉单例的实现和区别,依赖注入......
  • 第五十三天(sql注入)
  • B.50.10.08-Nacos架构与电商应用
  • cifar10下载太慢,解决使用第三方链接或迅雷下载
  • 【数据分享】中国河流水系 2000-2022 年变化矢量数据集(后附下载链接参考)
  • 【ComfyUI】区域条件控制 图像构图引导
  • Android Framework智能座舱面试题
  • 区块链论坛社区
  • 神马 M60S++ 238T矿机参数解析:高效SHA-256算法比拼
  • 【ComfyUI】混合 ControlNet 多模型组合控制生成
  • MHA高可用架构
  • 雷卯针对米尔MYC-YF13X开发板防雷防静电方案
  • 用Coze智能体工作流1分钟生成动物进化史视频,无需剪辑,附详细教程