Flood Fill é um algoritmo que tem como objetivo alterar a informação de nós (nodes) que estão conectados. Esse algoritmo é utilizado na ferramenta “balde” de softwares de desenho (como paint) e pode ser utilizado também em jogos como Go e Campo Minado para determinar quais posições serão limpas.
Imagine que cada quadrado na imagem é um pixel de uma imagem qualquer. No exemplo a imagem possui um fundo inteiro branco, e uma linha preta na diagonal. Essa imagem pode ser representada por uma matriz de pixels no nosso código.
Informamos ao programa uma coordenada inicial para obter um ponto de partida e guardamos a cor de fundo em uma variável. Esse ponto é armazenado numa Pilha/Fila e então começa o nosso loop de repetição. O ponto inicial é desempilhado/desenfileirado e preenchido com a nova cor. Em seguida, empilhamos/enfileiramos os 4 vizinhos laterais deste ponto.
Começamos o loop novamente, e então pintamos o pixel que foi desempilhado/desenfileirado. É importante que sempre ocorra uma verificação para checar se o pixel não está ultrapassando o limite da matriz (Index Out Of Bounds) e se a cor é igual a cor de fundo que foi armazenada no início do programa em uma variável (no caso desse exemplo, branco). Só iremos pintar o pixel caso essa condição seja atendida. Esse processo continua se repetindo enquanto a condição for atendida.
Pixels de cores diferentes do que a cor de fundo armazenada inicialmente são empilhados/enfileirados, mas nunca são pintados, pois não atendem as condições da checagem que é realizada dentro do loop (descrita anteriormente). O mesmo acontece com pixels inexistentes na imagem (fora da matriz).
Por não atenderem as condições de checagem, seus vizinhos também nunca são empilhados/enfileirados.
O algoritmo encerra quando todos os pixels tiverem sido preenchidos.