Flood Fill 算法原理及经典题目解析
前言
Flood Fill(也称为种子填充算法)是一种用于确定连接到多维数组中给定节点的区域的算法。
核心思想
- 从起点开始:从一个初始像素(种子点)开始
- 扩散填充:向四周(通常为 4 方向或 8 方向)扩展
- 条件匹配:只填充与种子点颜色相同且相邻的像素
- 避免重复:标记已访问的位置,防止重复处理
一、图像渲染
题目解析
给定一个 m*n 的二维数组,从起始位置 [sr,sc] 开始,将从起始位置的上下左右四个方向上相邻且与起始位置初始颜色相同的像素点进行染色,直到没有其他原始颜色的相邻像素。
算法思路
这道题整体还是非常简单的,从起始位置开始,进行一次深度优先遍历 DFS 即可。
注意:当起始位置 [sr, sc] 的颜色和目标颜色 color 相同时,直接返回原二维数组即可。
代码实现
class Solution {
public:
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
void dfs(vector<vector<int>>& image, int i, int j, int srcColor, int destColor) {
int m = image.size();
int n = image[0].size();
image[i][j] = destColor;
for (int k = 0; k < 4; k++) {
int x = i + dx[k];
y = j + dy[k];
(x >= && x < m && y >= && y < n && image[x][y] == srcColor) {
(image, x, y, srcColor, destColor);
}
}
}
vector<vector<>> (vector<vector<>>& image, sr, sc, color) {
(image[sr][sc] != color) {
(image, sr, sc, image[sr][sc], color);
}
image;
}
};


