// Flood fill sobre una cuadrícula de caracteres: se pinta la región que contiene una celda.
#include <stdio.h>

#define ROWS 6
#define COLS 12

void print_grid(char grid[][COLS + 1]) {
    for (int row = 0; row < ROWS; row++) {
        printf("%s\n", grid[row]);
    }
}

// Pinta con new_mark la región de celdas old_mark que contiene a (row, col).
// Exige: new_mark != old_mark.
void fill(char grid[][COLS + 1], int row, int col, char old_mark, char new_mark) {
    if (row < 0 || row >= ROWS || col < 0 || col >= COLS) {
        return;
    }
    if (grid[row][col] != old_mark) {
        return;
    }
    grid[row][col] = new_mark;
    fill(grid, row - 1, col, old_mark, new_mark);
    fill(grid, row + 1, col, old_mark, new_mark);
    fill(grid, row, col - 1, old_mark, new_mark);
    fill(grid, row, col + 1, old_mark, new_mark);
}

int main(void) {
    char grid[ROWS][COLS + 1] = {
        "....#.......",
        "....#..###..",
        "#####..#.#..",
        "..#....###..",
        "..#.........",
        "..#.........",
    };

    print_grid(grid);
    printf("\n");
    fill(grid, 4, 8, '.', 'o');
    print_grid(grid);
    return 0;
}
