Algoritmo de relleno de inundación usando gráficos C

Dado un rectángulo, su tarea de llenar este rectángulo usando el algoritmo de relleno de inundación. 
Ejemplos: 
 

Input : rectangle(left = 50, top = 50, right= 100, bottom = 100)
        flood( x = 55, y = 55, new_color = 12, old_color = 0)
Output : 

Input : rectangle(left = 50, top = 50, right= 200, bottom = 400)
        flood( x = 51, y = 51, new_color = 6, old_color = 0)
Output :

 

El algoritmo de relleno de inundación llena el color nuevo hasta que el 
color antiguo coincida.
Algoritmo de relleno de inundación: – 
 

// A recursive function to replace previous
// color 'oldcolor' at  '(x, y)' and all 
// surrounding pixels of (x, y) with new 
// color 'newcolor' and
floodfill(x, y, newcolor, oldcolor)
1) If x or y is outside the screen, then
   return.
2) If color of getpixel(x, y) is same as
   oldcolor, then 
3) Recur for top, bottom, right and left.
    floodFill(x+1, y, newcolor, oldcolor);
    floodFill(x-1, y, newcolor, oldcolor);
    floodFill(x, y+1, newcolor, oldcolor);
    floodFill(x, y-1, newcolor, oldcolor); 

CPP

// program to fill polygon using floodfill
// algorithm
#include <graphics.h>
#include <stdio.h>
 
// flood fill algorithm
void flood(int x, int y, int new_col, int old_col)
{
    // check current pixel is old_color or not
    if (getpixel(x, y) == old_col) {
 
        // put new pixel with new color
        putpixel(x, y, new_col);
 
        // recursive call for bottom pixel fill
        flood(x + 1, y, new_col, old_col);
 
        // recursive call for top pixel fill
        flood(x - 1, y, new_col, old_col);
 
        // recursive call for right pixel fill
        flood(x, y + 1, new_col, old_col);
 
        // recursive call for left pixel fill
        flood(x, y - 1, new_col, old_col);
    }
}
 
int main()
{
    int gd, gm = DETECT;
 
    // initialize graph
    initgraph(&gd, &gm, "");
 
    // rectangle coordinate
    int top, left, bottom, right;
 
    top = left = 50;
    bottom = right = 300;
 
    // rectangle for print rectangle
    rectangle(left, top, right, bottom);
 
    // filling start coordinate
    int x = 51;
    int y = 51;
 
    // new color to fill
    int newcolor = 12;
 
    // new color which you want to fill
    int oldcolor = 0;
 
    // call for fill rectangle
    flood(x, y, newcolor, oldcolor);
    getch();
 
    return 0;
}

Producción:- 
 

 

Publicación traducida automáticamente

Artículo escrito por DevanshuAgarwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *