Flood Fill
Problem
An image is represented by an m x n
integer grid image
where image[i][j]
represents the pixel value of the image.
You are also given three integers sr
, sc
, and color
. You should perform a flood fill on the image starting from the pixel image[sr][sc]
.
To perform a flood fill, consider the starting pixel, plus any pixels connected 4-directionally to the starting pixel of the same color as the starting pixel, plus any pixels connected 4-directionally to those pixels (also with the same color), and so on. Replace the color of all of the aforementioned pixels with color
.
Return the modified image after performing the flood fill.
Constraints
m == image.length
n == image[i].length
1 <= m, n <= 50
0 <= image[i][j], color < 216
0 <= sr < m
0 <= sc < n
Solution
The problem Flood Fill
can be solved using a depth-first search to find grids with the same color as image[sr][sc]
. One thing to note is that when image[sr][sc] == color
, then the search should not be performed since it can possibly form a infinite loop.
Implementation
static const int fast_io = []()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
return 0;
}();
class Solution
{
private:
int old_color;
int new_color;
public:
void helper(vector<vector<int>> &image, int col, int row)
{
if (!(0 <= col && col < image.size() && 0 <= row && row < image[0].size()))
return;
if (image[col][row] != old_color)
return;
image[col][row] = new_color;
helper(image, col - 1, row);
helper(image, col, row - 1);
helper(image, col, row + 1);
helper(image, col + 1, row);
}
vector<vector<int>> floodFill(vector<vector<int>> &image, int sr, int sc, int color)
{
old_color = image[sr][sc];
new_color = color;
if (old_color != new_color)
helper(image, sr, sc);
return image;
}
};