BFS解决FloodFill算法相关leetcode算法题

2023-12-24 21:36

本文主要是介绍BFS解决FloodFill算法相关leetcode算法题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1.图像渲染
  • 2.岛屿数量
  • 3.岛屿的最大面积
  • 4.被围绕的区域

1.图像渲染

图像渲染
在这里插入图片描述

class Solution {int dx[4] = {0,0,1,-1};int dy[4] = {1,-1,0,0};
public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {int m = image.size(), n = image[0].size();int prev = image[sr][sc];//保存一下先前的像素值if(prev == color) return image;//处理一下边界情况queue<pair<int,int>> q;q.push({sr,sc});while(q.size()){auto& [a,b] = q.front();q.pop();image[a][b] = color;for(int i=0;i<4;i++){int x = a+dx[i],y = b+dy[i];if(x>=0&&x<m&&y>=0&&y<n&&image[x][y]==prev){q.push({x,y});}}}return image;}
};

2.岛屿数量

岛屿数量
在这里插入图片描述

class Solution {int dx[4] = {0,0,1,-1};int dy[4] = {1,-1,0,0};bool vis[301][301];//标志数组,用于标记某一个点是否已经访问过int m,n;
public:int numIslands(vector<vector<char>>& grid) {m = grid.size(), n = grid[0].size();int ret = 0;for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(grid[i][j]=='1' && !vis[i][j]){ret++;bfs(grid,i,j);//将这一块区域都标记一下}}}return ret;}void bfs(vector<vector<char>>& grid,int i,int j){queue<pair<int,int>> q;q.push({i,j});vis[i][j] = true;while(q.size()){auto [a,b] = q.front();//注意这里是拷贝不能是引用,因为引用的话,递归调用会修改a,b的值q.pop();for(int k=0;k<4;k++){int x = a+dx[k], y = b+dy[k];if(x>=0 && x<m && y>=0 && y<n && grid[x][y]=='1' && !vis[x][y]){q.push({x,y});vis[x][y] = true;}}}}
};

3.岛屿的最大面积

岛屿的最大面积
在这里插入图片描述

class Solution {int dx[4] = {0,0,1,-1};int dy[4] = {1,-1,0,0};bool vis[51][51];int m,n;
public:int maxAreaOfIsland(vector<vector<int>>& grid) {m = grid.size(),n = grid[0].size();int ret = 0;for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(grid[i][j]== 1 &&!vis[i][j]){ret = max(ret,bfs(grid,i,j));}}}return ret;}int bfs(vector<vector<int>>& grid,int i,int j){int count = 0;queue<pair<int,int>> q;q.push({i,j});vis[i][j] = true;count++;while(q.size()){auto [a,b] = q.front();q.pop();for(int k=0;k<4;k++){int x = a+dx[k],y=b+dy[k];if(x>=0 && x<m && y>=0 && y<n && grid[x][y]== 1 && !vis[x][y]){count++;q.push({x,y});vis[x][y] = true;}}}return count;}
};

4.被围绕的区域

被围绕的区域
在这里插入图片描述

class Solution {int dx[4] = {0,0,1,-1};int dy[4] = {1,-1,0,0};int m,n;
public:void solve(vector<vector<char>>& board) {m=board.size(),n = board[0].size();//先处理边界上的'0'连通块for(int i=0;i<m;i++){if(board[i][0] == 'O') bfs(board,i,0);if(board[i][n-1]=='O') bfs(board,i,n-1);}for(int j=0;j<n;j++){if(board[0][j] == 'O') bfs(board,0,j);if(board[m-1][j] == 'O') bfs(board,m-1,j);}//还原for(int i=0;i<m;i++){for(int j=0;j<n;j++){if(board[i][j]=='O') board[i][j]='X';else if(board[i][j]=='.') board[i][j]='O';}}}void bfs(vector<vector<char>>& board,int i,int j){queue<pair<int,int>> q;q.push({i,j});board[i][j] = '.';while(q.size()){auto [a,b] = q.front();q.pop();for(int k=0;k<4;k++){int x = a+dx[k],y = b+dy[k];if(x>=0 && x<m && y>=0 && y<n && board[x][y]=='O'){board[x][y] = '.';q.push({x,y});}}}}
};

这篇关于BFS解决FloodFill算法相关leetcode算法题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/533210

相关文章

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

SQL Server配置管理器无法打开的四种解决方法

《SQLServer配置管理器无法打开的四种解决方法》本文总结了SQLServer配置管理器无法打开的四种解决方法,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录方法一:桌面图标进入方法二:运行窗口进入检查版本号对照表php方法三:查找文件路径方法四:检查 S

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

解决Entity Framework中自增主键的问题

《解决EntityFramework中自增主键的问题》:本文主要介绍解决EntityFramework中自增主键的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录Entity Framework中自增主键问题解决办法1解决办法2解决办法3总结Entity Fram

Nginx 配置跨域的实现及常见问题解决

《Nginx配置跨域的实现及常见问题解决》本文主要介绍了Nginx配置跨域的实现及常见问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来... 目录1. 跨域1.1 同源策略1.2 跨域资源共享(CORS)2. Nginx 配置跨域的场景2.1