El algoritmo de relleno por difusión, también llamado algoritmo de relleno, o -directamente del inglés- floodfill determina el área formada por elementos contiguos en una matriz multidimensional. Se usa en la herramienta Bote de pintura de programas de dibujo para determinar qué partes de un mapa de bits se van a rellenar de un color (o una textura), y en juegos como el Buscaminas, Puyo Puyo, Lumines y Magical Drop para determinar qué piezas pueden retirarse o seleccionarse.
El algoritmo de relleno en programas de dibujo, creado por S. Fazzini, requiere tres parámetros: un nodo inicial, un color para sustituir, y otro de relleno. El algoritmo rastrea todos los nodos que sean del color seleccionado, y a la vez contiguos entre sí y con el inicial, y los sustituye por el color de relleno.
Hay muchas maneras en las que el algoritmo de relleno por difusión puede ser estructurado, pero todas ellas hacen uso de tipos de datos tales como la cola o la pila, explícita o implícitamente. Una implementación del algoritmo de relleno por difusión basada en pilas se define de la siguiente manera (para un arreglo bidimensional):
Pese a su facilidad para entender, la implementación del algoritmo mostrada arriba no es práctica en lenguajes y entornos donde el espacio en la pila está severamente limitado (ej. applets Java).
Una implementación explícitamente basada en colas sería como sigue:
Implementaciones más prácticas usan un bucle para las direcciones derecha e izquierda como una optimización para evitar el desbordamiento de la pila o de la cola:
Adaptando el algoritmo para que use un arreglo adicional para almacenar la forma de la región permite la generalización para cubrir un relleno "difuso", donde un elemento puede diferenciarse hasta dentro de un umbral específico del símbolo de origen. Al utilizar este arreglo adicional como un canal alfa se permite que los bordes de la región rellena se mezclen con cierta suavidad con la región no rellena.
El algoritmo puede acelerarse rellenando líneas. En lugar de introducir en la pila la coordenada de cada píxel potencial, se inspeccionan las líneas vecinas (anterior y siguiente) para encontrar segmentos adyacentes que puedan ser rellenados en un pase futuro. Se introducen en la pila las coordenadas de los segmentos de línea (ya sea su inicio o su final). En la mayoría de los casos este algoritmo es por lo menos más rápido en un orden de magnitud que el basado en cada pixel.
La versión actualmente en desarrollo del software Inkscape incluye una herramienta de llenado que permite lograr un resultado similar al de las operaciones con mapa de bits. De hecho utiliza uno de los métodos: se renderiza el lienzo, se realiza una operación floodfill en el área seleccionada para luego realizar el camino inverso y así trazar un recorrido.