#include <stdio.h>
#define M 8 // Number of rows
#define N 8 // Number of columns
// Function to check if a given pixel is valid
int isValid(int screen[M][N], int x, int y, int oldColor, int newColor) {
// Check if pixel is within bounds, has the old color, and is not already the new color
if (x >= 0 && x < M && y >= 0 && y < N && screen[x][y] == oldColor && screen[x][y] != newColor) {
return 1;
}
return 0;
}
// 4-connected recursive flood fill function
void floodFill4Connected(int screen[M][N], int x, int y, int newColor, int oldColor) {
if (!isValid(screen, x, y, oldColor, newColor)) {
return;
}
// Replace the color of the current pixel
screen[x][y] = newColor;
// Recur for 4 connected neighbours (up, down, left, right)
floodFill4Connected(screen, x + 1, y, newColor, oldColor); // Right
floodFill4Connected(screen, x - 1, y, newColor, oldColor); // Left
floodFill4Connected(screen, x, y + 1, newColor, oldColor); // Down
floodFill4Connected(screen, x, y - 1, newColor, oldColor); // Up
}
// Driver code to test the algorithm
int main() {
int screen[M][N] = {
{1, 1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 1, 1, 0, 0},
{1, 0, 0, 1, 1, 0, 1, 1},
{1, 2, 2, 2, 2, 0, 1, 0},
{1, 1, 1, 2, 2, 0, 1, 0},
{1, 1, 1, 2, 2, 2, 2, 0},
{1, 1, 1, 1, 1, 2, 1, 1},
{1, 1, 1, 1, 1, 2, 2, 1},
};
int x = 4, y = 4, newColor = 3; // Starting position (4, 4) and new color
int oldColor = screen[x][y];
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
}
}
floodFill4Connected(screen, x, y, newColor, oldColor);
printf("\nScreen after 4-connected Flood Fill:\n"); for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++) {
}
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIE0gOCAvLyBOdW1iZXIgb2Ygcm93cwojZGVmaW5lIE4gOCAvLyBOdW1iZXIgb2YgY29sdW1ucwoKLy8gRnVuY3Rpb24gdG8gY2hlY2sgaWYgYSBnaXZlbiBwaXhlbCBpcyB2YWxpZAppbnQgaXNWYWxpZChpbnQgc2NyZWVuW01dW05dLCBpbnQgeCwgaW50IHksIGludCBvbGRDb2xvciwgaW50IG5ld0NvbG9yKSB7CiAgICAvLyBDaGVjayBpZiBwaXhlbCBpcyB3aXRoaW4gYm91bmRzLCBoYXMgdGhlIG9sZCBjb2xvciwgYW5kIGlzIG5vdCBhbHJlYWR5IHRoZSBuZXcgY29sb3IKICAgIGlmICh4ID49IDAgJiYgeCA8IE0gJiYgeSA+PSAwICYmIHkgPCBOICYmIHNjcmVlblt4XVt5XSA9PSBvbGRDb2xvciAmJiBzY3JlZW5beF1beV0gIT0gbmV3Q29sb3IpIHsKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIHJldHVybiAwOwp9CgovLyA0LWNvbm5lY3RlZCByZWN1cnNpdmUgZmxvb2QgZmlsbCBmdW5jdGlvbgp2b2lkIGZsb29kRmlsbDRDb25uZWN0ZWQoaW50IHNjcmVlbltNXVtOXSwgaW50IHgsIGludCB5LCBpbnQgbmV3Q29sb3IsIGludCBvbGRDb2xvcikgewogICAgaWYgKCFpc1ZhbGlkKHNjcmVlbiwgeCwgeSwgb2xkQ29sb3IsIG5ld0NvbG9yKSkgewogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBSZXBsYWNlIHRoZSBjb2xvciBvZiB0aGUgY3VycmVudCBwaXhlbAogICAgc2NyZWVuW3hdW3ldID0gbmV3Q29sb3I7CgogICAgLy8gUmVjdXIgZm9yIDQgY29ubmVjdGVkIG5laWdoYm91cnMgKHVwLCBkb3duLCBsZWZ0LCByaWdodCkKICAgIGZsb29kRmlsbDRDb25uZWN0ZWQoc2NyZWVuLCB4ICsgMSwgeSwgbmV3Q29sb3IsIG9sZENvbG9yKTsgLy8gUmlnaHQKICAgIGZsb29kRmlsbDRDb25uZWN0ZWQoc2NyZWVuLCB4IC0gMSwgeSwgbmV3Q29sb3IsIG9sZENvbG9yKTsgLy8gTGVmdAogICAgZmxvb2RGaWxsNENvbm5lY3RlZChzY3JlZW4sIHgsIHkgKyAxLCBuZXdDb2xvciwgb2xkQ29sb3IpOyAvLyBEb3duCiAgICBmbG9vZEZpbGw0Q29ubmVjdGVkKHNjcmVlbiwgeCwgeSAtIDEsIG5ld0NvbG9yLCBvbGRDb2xvcik7IC8vIFVwCn0KCi8vIERyaXZlciBjb2RlIHRvIHRlc3QgdGhlIGFsZ29yaXRobQppbnQgbWFpbigpIHsKICAgIGludCBzY3JlZW5bTV1bTl0gPSB7CiAgICAgICAgezEsIDEsIDEsIDEsIDEsIDEsIDEsIDF9LAogICAgICAgIHsxLCAxLCAxLCAxLCAxLCAxLCAwLCAwfSwKICAgICAgICB7MSwgMCwgMCwgMSwgMSwgMCwgMSwgMX0sCiAgICAgICAgezEsIDIsIDIsIDIsIDIsIDAsIDEsIDB9LAogICAgICAgIHsxLCAxLCAxLCAyLCAyLCAwLCAxLCAwfSwKICAgICAgICB7MSwgMSwgMSwgMiwgMiwgMiwgMiwgMH0sCiAgICAgICAgezEsIDEsIDEsIDEsIDEsIDIsIDEsIDF9LAogICAgICAgIHsxLCAxLCAxLCAxLCAxLCAyLCAyLCAxfSwKICAgIH07CiAgICBpbnQgeCA9IDQsIHkgPSA0LCBuZXdDb2xvciA9IDM7IC8vIFN0YXJ0aW5nIHBvc2l0aW9uICg0LCA0KSBhbmQgbmV3IGNvbG9yCiAgICBpbnQgb2xkQ29sb3IgPSBzY3JlZW5beF1beV07CgogICAgcHJpbnRmKCJPcmlnaW5hbCBTY3JlZW46XG4iKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBOOyBqKyspIHsKICAgICAgICAgICAgcHJpbnRmKCIlZCAiLCBzY3JlZW5baV1bal0pOwogICAgICAgIH0KICAgICAgICBwcmludGYoIlxuIik7CiAgICB9CgogICAgZmxvb2RGaWxsNENvbm5lY3RlZChzY3JlZW4sIHgsIHksIG5ld0NvbG9yLCBvbGRDb2xvcik7CgogICAgcHJpbnRmKCJcblNjcmVlbiBhZnRlciA0LWNvbm5lY3RlZCBGbG9vZCBGaWxsOlxuIik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE07IGkrKykgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgTjsgaisrKSB7CiAgICAgICAgICAgIHByaW50ZigiJWQgIiwgc2NyZWVuW2ldW2pdKTsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==