Flood Fill 算法核心思想
Flood Fill(洪水填充)是一种基于连通性遍历的算法,常用于确定多维数组中给定节点所属的区域。其核心逻辑非常直观:
- 种子点扩散:从初始像素出发,向四周扩展。
- 条件匹配:仅填充颜色相同且相邻的像素。
- 状态标记:记录已访问位置,避免死循环或重复计算。
这类问题通常使用深度优先搜索(DFS)或广度优先搜索(BFS)实现。下面结合四个经典题目,演示如何灵活应用这一思路。
一、图像渲染
题目描述
给定一个 m * n 的二维数组表示图像,从起始位置 [sr, sc] 开始,将上下左右四个方向上相邻且与起始位置初始颜色相同的像素点进行染色,直到没有符合条件的相邻像素为止。

解题思路
这道题的逻辑其实很直观,本质上就是一次标准的 DFS 遍历。需要注意一个边界情况:如果起始位置的颜色已经等于目标颜色,直接返回原数组即可,无需任何操作。
代码实现
class Solution {
int dx[4] = {-1, 1, 0, 0};
int dy[4] = {0, 0, -1, 1};
public:
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 ( k = ; k < ; k++) {
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;
}
};





