Si hallas algún fallo en tu código o trabajo, recuerda probar siempre en un entorno de testing antes subir el código al trabajo final.
Solución:
Simplemente implemente una pila de pares int con un array de algún tamaño fijo (tal vez el tamaño de la imagen en píxeles o la raíz cuadrada de eso, por ejemplo) para la pila y rastree la parte superior con un int.
Aquí hay un código C# que implementa floodfill de forma no recursiva:
private static void Floodfill(byte[,] vals, Point q, byte SEED_COLOR, byte COLOR)
Aquí hay un código C++ que hace lo que quieres. Utiliza una cola y es más eficiente con respecto a las inserciones en la cola.
connectedRegion(const Point& source, RegionType& region, const Color target)
Una búsqueda rápida en Google muestra el artículo de Wikipedia sobre Flood Fill que incluye implementaciones de pseudocódigo que no son recursivas. A continuación hay un código que podría ayudarlo a comenzar, una implementación de cola básica en C:
typedef struct queue_ struct queue_ *next; queue_t;
typedef struct ffnode_ queue_t node; int x, y; ffnode_t;
/* returns the new head of the queue after adding node to the queue */
queue_t* enqueue(queue_t *queue, queue_t *node)
if (node)
node->next = queue;
return node;
return NULL;
/* returns the head of the queue and modifies queue to be the new head */
queue_t* dequeue(queue_t **queue)
if (queue)
queue_t *node = (*queue);
(*queue) = node->next;
node->next = NULL;
return node;
return NULL;
ffnode_t* new_ffnode(int x, int y)
ffnode_t *node = (ffnode_t*)malloc(sizeof(ffnode_t));
node->x = x; node->y = y;
node->node.next = NULL;
return node;
void flood_fill(image_t *image, int startx, int starty,
color_t target, color_t replacement)
queue_t *head = NULL;
ffnode_t *node = NULL;
if (!is_color(image, startx, starty, target)) return;
node = new_ffnode(startx, starty);
for ( ; node != NULL; node = (ffnode_t*)dequeue(&head))
if (is_color(image, node->x, node->y, target))
ffnode_t *west = node, *east = node;
recolor(image, node->x, node->y, replacement);
/* 1. move w to the west until the color of the node to the west
no longer matches target */
...
Valoraciones y reseñas
Si para ti ha resultado de utilidad este post, te agradeceríamos que lo compartas con el resto programadores de esta manera contrubuyes a difundir este contenido.