Recursive DFS
void floodFill(int[][] grid, int r, int c, int newColor, int oldColor) {
if (r < 0 || r >= grid.length || c < 0 || c >= grid[0].length) return;
if (grid[r][c] != oldColor) return;
grid[r][c] = newColor;
floodFill(grid, r-1, c, newColor, oldColor);
floodFill(grid, r+1, c, newColor, oldColor);
floodFill(grid, r, c-1, newColor, oldColor);
floodFill(grid, r, c+1, newColor, oldColor);
}Advertisement
Iterative BFS
Explicit queue. Avoids stack overflow on huge regions.
Advertisement
Scanline fill
Fill horizontal strips per line. Much faster in practice than pixel-by-pixel.
Applications
Paint bucket. Bomberman-style region detection. Image segmentation (basic). Game map generation.