Mediante recursividad es muy fácil, aunque es mucho más costoso computacionalmente, sería algo así:
botePintura (nuevoColor, x, y) {
color = obtenerPuntoColorPunto(x, y);
pintar(x, y, nuevoColor);
botePinturaRecursivo(x, y+1, color, nuevoColor);
botePinturaRecursivo(x, y-1, color, nuevoColor);
botePinturaRecursivo(x-1, y, color, nuevoColor);
botePinturaRecursivo(x+1, y, color, nuevoColor);
}
botePinturaRecursivo(x, y, color, nuevoColor) {
if (color != obtenerPuntoColorPunto(x, y))
return;
pintar(x, y, nuevoColor);
botePinturaRecursivo(x, y+1, color, nuevoColor);
botePinturaRecursivo(x, y-1, color, nuevoColor);
botePinturaRecursivo(x-1, y, color, nuevoColor);
botePinturaRecursivo(x+1, y, color, nuevoColor);
}