#include <bits/stdc++.h>
using namespace std;
#include <iostream>
#include <vector>
using namespace std;
void dfs(vector<vector<int>>& img, int x,
int y, int oldColor, int newColor) {
if (x < 0 || x >= img.size() ||
y < 0 || y >= img[0].size() || img[x][y] != oldColor) {
return;
}
// Update the color of the current pixel
img[x][y] = newColor;
// Recursively visit all 4 connected neighbors
dfs(img, x + 1, y, oldColor, newColor);
dfs(img, x - 1, y, oldColor, newColor);
dfs(img, x, y + 1, oldColor, newColor);
dfs(img, x, y - 1, oldColor, newColor);
}
vector<vector<int>> floodFill(vector<vector<int>>& img, int sr,
int sc, int newColor) {
// If the starting pixel already has the new color,
// no changes are needed
if (img[sr][sc] == newColor) {
return img;
}
// Call DFS to start filling from the source pixel
// Store original color
int oldColor = img[sr][sc];
dfs(img, sr, sc, oldColor, newColor);
return img;
}
int main() {
vector<vector<int>> img = {
{1, 1, 1, 0},
{0, 1, 1, 1},
{1, 0, 1, 1}
};
int sr = 1, sc = 2;
int newColor = 2;
vector<vector<int>> result = floodFill(img, sr, sc, newColor);
for (auto& row : result) {
for (auto& pixel : row) {
cout << pixel << " ";
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgZGZzKHZlY3Rvcjx2ZWN0b3I8aW50Pj4mIGltZywgaW50IHgsIAogICAgICAgICBpbnQgeSwgaW50IG9sZENvbG9yLCBpbnQgbmV3Q29sb3IpIHsKICAgIAogICAgaWYgKHggPCAwIHx8IHggPj0gaW1nLnNpemUoKSB8fCAKICAgICAgICB5IDwgMCB8fCB5ID49IGltZ1swXS5zaXplKCkgfHwgaW1nW3hdW3ldICE9IG9sZENvbG9yKSB7CiAgICAgICAgICAgICAgcmV0dXJuOyAKICAgIH0KCiAgICAvLyBVcGRhdGUgdGhlIGNvbG9yIG9mIHRoZSBjdXJyZW50IHBpeGVsCiAgICBpbWdbeF1beV0gPSBuZXdDb2xvcjsKCiAgICAvLyBSZWN1cnNpdmVseSB2aXNpdCBhbGwgNCBjb25uZWN0ZWQgbmVpZ2hib3JzCiAgICBkZnMoaW1nLCB4ICsgMSwgeSwgb2xkQ29sb3IsIG5ld0NvbG9yKTsgCiAgICBkZnMoaW1nLCB4IC0gMSwgeSwgb2xkQ29sb3IsIG5ld0NvbG9yKTsgCiAgICBkZnMoaW1nLCB4LCB5ICsgMSwgb2xkQ29sb3IsIG5ld0NvbG9yKTsgCiAgICBkZnMoaW1nLCB4LCB5IC0gMSwgb2xkQ29sb3IsIG5ld0NvbG9yKTsgCn0KCnZlY3Rvcjx2ZWN0b3I8aW50Pj4gZmxvb2RGaWxsKHZlY3Rvcjx2ZWN0b3I8aW50Pj4mIGltZywgaW50IHNyLCAKICAgIGludCBzYywgaW50IG5ld0NvbG9yKSB7CgogICAgLy8gSWYgdGhlIHN0YXJ0aW5nIHBpeGVsIGFscmVhZHkgaGFzIHRoZSBuZXcgY29sb3IsCiAgICAvLyBubyBjaGFuZ2VzIGFyZSBuZWVkZWQKICAgIGlmIChpbWdbc3JdW3NjXSA9PSBuZXdDb2xvcikgewogICAgICAgIHJldHVybiBpbWc7CiAgICB9CgogICAgLy8gQ2FsbCBERlMgdG8gc3RhcnQgZmlsbGluZyBmcm9tIHRoZSBzb3VyY2UgcGl4ZWwKICAgICAvLyBTdG9yZSBvcmlnaW5hbCBjb2xvcgogICAgaW50IG9sZENvbG9yID0gaW1nW3NyXVtzY107CiAgICBkZnMoaW1nLCBzciwgc2MsIG9sZENvbG9yLCBuZXdDb2xvcik7CgogICAgcmV0dXJuIGltZzsKfQoKaW50IG1haW4oKSB7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGltZyA9IHsKICAgICAgICB7MSwgMSwgMSwgMH0sCiAgICAgICAgezAsIDEsIDEsIDF9LAogICAgICAgIHsxLCAwLCAxLCAxfQogICAgfTsKCiAgICBpbnQgc3IgPSAxLCBzYyA9IDI7CgogICAgaW50IG5ld0NvbG9yID0gMjsgICAgICAgIAoKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gcmVzdWx0ID0gZmxvb2RGaWxsKGltZywgc3IsIHNjLCBuZXdDb2xvcik7CgogICAgZm9yIChhdXRvJiByb3cgOiByZXN1bHQpIHsKICAgICAgICBmb3IgKGF1dG8mIHBpeGVsIDogcm93KSB7CiAgICAgICAgICAgIGNvdXQgPDwgcGl4ZWwgPDwgIiAiOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9Cg==