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

【算法专题十四】BFS解决FloodFill算法

文章目录

  • 1.简介
  • 2.图像渲染
    • 2.1 题目
    • 2.2 思路
    • 2.3代码
  • 3.岛屿数量
    • 3.1 题目
    • 3.2 思路
    • 3.3 代码
  • 4.岛屿的最大面积
    • 4.1 题目
    • 4.2 思路
    • 4.3 代码
  • 5. 被围绕的区域
    • 5.1 题目
    • 5.2 思路
    • 5.3 代码

1.简介

在这里插入图片描述

2.图像渲染

2.1 题目

题目链接
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 思路

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

2.3代码

class Solution {
public:vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {int prev = image[sr][sc];if(prev == color) return image; // 判断边界条件queue<pair<int, int>> q;q.push({sr, sc});int dx[4] = {0, 0, 1, -1};int dy[4] = {1, -1, 0, 0};int m = image.size(), n = image[0].size();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;}
};

3.岛屿数量

3.1 题目

题目链接
在这里插入图片描述
在这里插入图片描述

3.2 思路

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

3.3 代码

class Solution {
public:bool vis[301][301];int dx[4] = {0, 0, -1, 1}, dy[4] = {-1, 1, 0, 0};int m, n;int numIslands(vector<vector<char>>& grid) {int ret = 0;m = grid.size(), n = grid[0].size();for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(grid[i][j] == '1' && !vis[i][j]){ret += 1;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();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;}}}}
};

4.岛屿的最大面积

4.1 题目

题目链接
在这里插入图片描述
在这里插入图片描述

4.2 思路

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

4.3 代码

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

5. 被围绕的区域

5.1 题目

题目链接
在这里插入图片描述
在这里插入图片描述

5.2 思路

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

5.3 代码

class Solution {
public:int m, n;// bool vis[201][201];// 因为这个题可以直接在原数组上修改,所以就不用vis数组了int dx[4] = {0, 0, -1, 1}, dy[4] = {-1, 1, 0, 0};void solve(vector<vector<char>>& board) {m = board.size(), n = board[0].size();// 1.先把边缘的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';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});}}}}
};
http://www.xdnf.cn/news/7375.html

相关文章:

  • 部署springBoot项目的脚本-windows
  • C++(25): 标准库 <deque>
  • 迅联文库开发日志(三)登陆注册
  • esp32课设记录(四)摩斯密码的实现 并用mqtt上传
  • Springboot 跨域拦截器配置说明
  • JavaScript 学习
  • DW_DMAC简介
  • 嵌入式学习笔记 D22:栈与队列
  • 编排优先——Go 语言开发 AI 智能体的设计与实现
  • 专为MoE设计的“超级工厂”,来了
  • 跨境业务服务器架构设计与CN2线路深度调优
  • Spring Boot 接口定义指南:构建高效的RESTful API
  • 【第二届帕鲁杯】第二届帕鲁杯畸行的爱完整wp
  • RSP-BSP-1
  • 生成式人工智能认证(GAI认证)在企业中的认可度怎样?
  • 基于 STM32 的自动温度巡检小车控制系统设计与实现
  • 第五天的尝试
  • 经典算法复习——快速模幂
  • 51单片机点亮一个LED介绍
  • C++ 函数对象、仿函数与 Lambda 表达式详解
  • 12.vue整合springboot首页显示数据库表-实现按钮:【添加修改删除查询】
  • 深入Java G1 GC调优:如何解决高延迟与吞吐量瓶颈
  • 嵌入式学习笔记 - STM32独立看门狗IWDG与窗口看门狗WWDG的区别
  • HTTPS实验室——TLS/TLCP一站式解决方案
  • C语言——深入理解指针(一)
  • rosbag使用记录
  • 搭建一个永久免费的博客
  • Java设计模式之组合模式:从入门到精通(保姆级教程)
  • Java 泛型详解
  • 黄仁勋Computex演讲:将于三季度推出下一代GB300系统,个人AI计算机DGX Spark已全面投产