Medium 0 solved 0% acceptance

Count Islands

Count groups of connected land cells in a grid.

What you'll learn

  • Explore connected cells with DFS
  • Mark visited cells
  • Count connected components in a grid

Problem

The grid holds 1 for land and 0 for water. Land cells that touch up, down, left or right belong to the same island. Count the islands; a recursive flood fill is a natural approach.

Implement count_islands(grid).

Input

grid: A rectangular grid of 0s and 1s.

Output

Return the number of islands.

Constraints

0 ≤ rows, columns ≤ 100

Examples

Example 1
Input:
grid = [
    [1, 1, 0, 0],
    [0, 1, 0, 1],
    [0, 0, 0, 1]
]

Expected output:
expected = 2
Input:
std::vector<std::vector<long long>> grid = {
    {1, 1, 0, 0},
    {0, 1, 0, 1},
    {0, 0, 0, 1}
};

Expected output:
long long expected = 2;
Input:
long[][] grid = new long[][] {
    new long[] {1, 1, 0, 0},
    new long[] {0, 1, 0, 1},
    new long[] {0, 0, 0, 1}
};

Expected output:
long expected = 2;

Explanation

The top-left group of 3 cells is one island; the two 1s on the right form a second: 2.

Example 2
Input:
grid = [
    [1, 0, 1],
    [0, 1, 0]
]

Expected output:
expected = 3
Input:
std::vector<std::vector<long long>> grid = {
    {1, 0, 1},
    {0, 1, 0}
};

Expected output:
long long expected = 3;
Input:
long[][] grid = new long[][] {
    new long[] {1, 0, 1},
    new long[] {0, 1, 0}
};

Expected output:
long expected = 3;

Explanation

Diagonal neighbors don't connect, so each 1 is its own island: 3.

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

Each land cell belongs to one island if it connects vertically or horizontally.

Hint 2

When you find new land, flood-fill its whole region so you do not count it again.

Hint 3

Watch the grid boundaries carefully during the recursive exploration.

Expected complexity

O(rows × columns) time, O(rows × columns) extra space

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.