✨✨✨学习的道路很枯燥,希望我们能并肩走下来!
文章目录
目录
前言
本篇详细介绍了进一步介绍floodfill算法,让使用者对floodfill算法有更加深刻的认知,而不是仅仅停留在表面,更好的模拟,为了更好的使用. 文章可能出现错误,如有请在评论区指正,让我们一起交流,共同进步!
一 floodfill算法是什么?
洪水填充(也称为种子填充)是一种算法,用于确定连接到多维数组中给定节点的区域。
可以用dfs或者bfs来作为基础,我们这里用DFS
floodfill的本质是搜索找到性质相同的一个连通块(区域)
二 相关OJ题练习
2.1 图像渲染
class Solution {
int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};
int m,n,prev;
public:
vector<vector<int>> floodFill(vector<vector<int>>& image, int sr, int sc, int color) {
if(image[sr][sc] == color) return image;
prev = image[sr][sc];
m = image.size(),n = image[0].size();
dfs(image,sr,sc,color);
return image;
}
void dfs(vector<vector<int>>& image, int i, int j, int color)
{
image[i][j] = color;
for(int k = 0; k < 4;k++)
{
int x = i + dx[k], y = j + dy[k];
if(x >=0 && x < m && y >= 0 && y < n && image[x][y] == prev)
{
dfs(image,x,y,color);
}
}
}
};
2.2 岛屿数量
class Solution {
int dx[4] = {0,0,1,-1};
int dy[4] = {1,-1,0,0};
int ret,m,n;
bool vis[301][301];
public:
int numIslands(vector<vector<char>>& grid) {
m =