Foundations

Number of Islands

Count connected land regions in a 2D grid using DFS with in-place mutation to mark visited cells

mediumFree~15 min

Problem

Mapping services need to count discrete landmasses in satellite imagery. Given a 2D grid where '1' represents land and '0' represents water, count the number of islands. An island is a group of adjacent '1' cells connected horizontally or vertically, surrounded by water.

grid = [
  ['1','1','1','1','0'],
  ['1','1','0','1','0'],
  ['1','1','0','0','0'],
  ['0','0','0','0','0'],
] → 1
 
grid = [
  ['1','1','0','0','0'],
  ['1','1','0','0','0'],
  ['0','0','1','0','0'],
  ['0','0','0','1','1'],
] → 3

Solution

Approach: Grid DFS with in-place sinking (connected-component count on an implicit graph).

Treat the grid as an implicit graph where every '1' is a node and adjacent '1' cells share an edge. Counting islands is just counting connected components. The outer double loop scans every cell; when it finds a '1' that has not been sunk yet, that cell belongs to a brand-new island, so it launches a DFS and bumps the counter by one. The DFS recurses into all four neighbors and, crucially, sets grid[row][col] = '0' the moment it enters a land cell. That mutation doubles as the visited mark - a sunk cell fails the != '1' guard, so recursion never re-enters it and the count never double-tallies the same landmass. The two guards at the top of dfs (out-of-bounds, then non-land) are what keep the recursion safely inside the grid. Trace the three-islands example - the first DFS from (0,0) floods the whole top-left 2x2 block to water in one launch, so when the scan later reaches those cells they are already '0' and skipped; only the next fresh '1' (the middle island) triggers launch two.

Edge cases: Empty grid returns 0 via the not grid guard; an all-water grid never launches DFS; a single '1' is one island. A checkerboard makes every land cell its own island since no two share an edge.

Complexity: O(m * n) time, O(m * n) space - each cell is visited once, and a snake-shaped island can drive recursion depth to the full cell count.

Done reading? Mark it so it sticks in your dashboard.

Next in CodingClone Graph

Discussion (0)

Sign in to join the discussion.
No comments yet. Start the discussion.