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.