Flood Fill(洪水填充算法)是一种用于确定多维数组中给定节点连通区域的经典算法。其核心在于从种子点出发,向四周扩散,仅填充满足特定条件的相邻节点,并通过标记已访问位置避免重复处理。
一、图像渲染
题目描述
给定一个 m*n 的二维整数数组 image,以及起始坐标 [sr, sc] 和目标颜色 color。要求将起始位置及其上下左右四个方向上相邻且颜色相同的像素点全部染成目标颜色。
思路分析
这道题是 Flood Fill 最直接的体现。我们只需要从起点开始进行一次深度优先搜索(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 (int k = 0; k < 4; k++) {
int x = i + dx[k];
int y = j + dy[k];
// 边界检查 & 颜色匹配
if (x >= 0 && x < m && y >= 0 && 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;
}
};


