Bird
Raised Fist0
DSA C++programming~5 mins

Number of Islands BFS and DFS in DSA C++ - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the main goal of the Number of Islands problem?
To count how many separate groups of connected '1's (land) exist in a 2D grid of '1's and '0's (land and water).
Click to reveal answer
beginner
How does Depth-First Search (DFS) help solve the Number of Islands problem?
DFS explores all connected land cells from a starting point recursively, marking them visited to avoid counting the same island multiple times.
Click to reveal answer
beginner
What is the role of Breadth-First Search (BFS) in the Number of Islands problem?
BFS uses a queue to explore all connected land cells level by level, marking visited cells to count each island once.
Click to reveal answer
beginner
Why do we mark cells as visited in Number of Islands algorithms?
To avoid revisiting the same land cells and counting the same island multiple times, ensuring accurate island count.
Click to reveal answer
beginner
What data structure is commonly used in BFS for Number of Islands?
A queue is used to keep track of cells to visit next in BFS.
Click to reveal answer
In the Number of Islands problem, what does a '1' represent in the grid?
ALand
BWater
CVisited cell
DBoundary
Which traversal method uses a stack or recursion to explore connected cells?
ADepth-First Search (DFS)
BBinary Search
CBreadth-First Search (BFS)
DLinear Search
What data structure does BFS use to keep track of nodes to visit?
AStack
BQueue
CSet
DArray
Why do we mark cells as visited in Number of Islands algorithms?
ATo count water cells
BTo sort the grid
CTo increase the island count
DTo avoid counting the same island multiple times
Which of these is NOT a valid neighbor direction in Number of Islands problem?
ALeft
BDown
CDiagonal
DUp
Explain how DFS can be used to count the number of islands in a grid.
Think about exploring all connected parts of an island before moving on.
You got /4 concepts.
    Describe the difference between BFS and DFS approaches in the Number of Islands problem.
    Focus on how they explore neighbors differently.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does the "Number of Islands" problem ask you to find in a 2D grid of '1's (land) and '0's (water)?
      easy
      A. Count total number of '1's in the grid
      B. Count how many separate groups of connected '1's exist
      C. Find the largest island size
      D. Find the shortest path between two islands

      Solution

      1. Step 1: Understand the problem definition

        The problem asks to count distinct islands, where an island is a group of connected '1's horizontally or vertically.
      2. Step 2: Clarify what is being counted

        We count how many separate clusters of '1's exist, not the total number of '1's or sizes.
      3. Final Answer:

        Count how many separate groups of connected '1's exist -> Option B
      4. Quick Check:

        Number of islands = count of connected '1' groups [OK]
      Hint: Islands = groups of connected '1's, count groups not cells [OK]
      Common Mistakes:
      • Counting total '1's instead of groups
      • Including diagonal connections as connected
      • Confusing island size with island count
      2. Which of the following C++ code snippets correctly initializes a 2D vector grid of chars with given rows and columns filled with '0'?
      easy
      A. std::vector grid(rows, std::vector<char>(cols, '0'));
      B. std::vector<char> grid(rows, std::vector<char>(cols, '0'));
      C. std::vector grid(cols, std::vector<char>(rows, '0'));
      D. std::vector grid(rows, cols, '0');

      Solution

      1. Step 1: Understand 2D vector initialization syntax

        To create a 2D vector of chars, use vector of vectors: outer vector size = rows, inner vector size = cols.
      2. Step 2: Check each option

        std::vector grid(rows, std::vector<char>(cols, '0')); correctly creates 'rows' vectors each with 'cols' chars initialized to '0'. Others have wrong types or parameters.
      3. Final Answer:

        std::vector grid(rows, std::vector<char>(cols, '0')); -> Option A
      4. Quick Check:

        2D vector init = vector of vectors with sizes [OK]
      Hint: Use vector(rows, vector<char>(cols, '0')) [OK]
      Common Mistakes:
      • Swapping rows and cols sizes
      • Using wrong vector types
      • Trying to initialize 2D vector with three parameters
      3. Given the following grid and BFS-based code snippet to count islands, what is the output?
      std::vector grid = {
        {'1','1','0','0'},
        {'1','0','0','1'},
        {'0','0','1','1'},
        {'0','0','0','0'}
      };
      int countIslands(const std::vector& grid) {
        int count = 0;
        int rows = grid.size();
        int cols = grid[0].size();
        std::vector visited(rows, std::vector<bool>(cols, false));
        std::queue> q;
        int directions[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
        for(int i=0; i=0 && nr=0 && nc
      medium
      A. 3
      B. 4
      C. 2
      D. 1

      Solution

      1. Step 1: Identify islands in the grid

        Islands are groups of connected '1's. Here, islands are: top-left cluster (3 cells), single '1' at (1,3), and bottom cluster (2 cells at (2,2),(2,3)). Total 3 islands.
      2. Step 2: Understand BFS traversal

        The BFS marks all connected '1's visited per island, so count increments once per island found.
      3. Final Answer:

        3 -> Option A
      4. Quick Check:

        Count islands = 3 [OK]
      Hint: Count connected groups by BFS marking visited [OK]
      Common Mistakes:
      • Counting diagonal connections as islands
      • Missing isolated '1's as separate islands
      • Not marking visited correctly causing overcount
      4. The following DFS code for counting islands has a bug. What is the bug?
      void dfs(int r, int c, std::vector& grid) {
        int rows = grid.size();
        int cols = grid[0].size();
        if(r < 0 || c < 0 || r >= rows || c >= cols || grid[r][c] == '0')
          return;
        grid[r][c] = '0';
        dfs(r+1, c, grid);
        dfs(r-1, c, grid);
        dfs(r, c+1, grid);
        dfs(r, c-1, grid);
      }
      
      int numIslands(std::vector& grid) {
        int count = 0;
        for(int i=0; i
      medium
      A. The base case does not check for visited cells
      B. The DFS does not check boundaries correctly
      C. The DFS does not mark visited cells, causing infinite recursion
      D. The grid is modified during DFS, which is incorrect

      Solution

      1. Step 1: Analyze DFS grid modification

        The DFS marks visited cells by changing '1' to '0' in the original grid, modifying input.
      2. Step 2: Identify why this is a bug

        Modifying input grid may be unintended side effect; better to use a separate visited array to avoid altering input data.
      3. Final Answer:

        The grid is modified during DFS, which is incorrect -> Option D
      4. Quick Check:

        Modifying input grid = bug [OK]
      Hint: Avoid changing input grid; use visited array instead [OK]
      Common Mistakes:
      • Ignoring that grid is changed in-place
      • Assuming no visited tracking needed
      • Misreading boundary checks as incorrect
      5. You want to count islands in a grid where diagonal connections also count as connected (8 directions). How should you modify the BFS or DFS approach?
      hard
      A. Count islands by summing all '1's without traversal
      B. Only check horizontal neighbors, ignore vertical and diagonal
      C. Add diagonal directions (like (1,1), (1,-1), (-1,1), (-1,-1)) to the directions array
      D. Use BFS for horizontal and DFS for vertical connections separately

      Solution

      1. Step 1: Understand connectivity change

        Diagonal connections mean neighbors include 8 directions: up, down, left, right, and 4 diagonals.
      2. Step 2: Modify directions array

        Add diagonal moves (1,1), (1,-1), (-1,1), (-1,-1) to directions used in BFS or DFS to explore all connected neighbors.
      3. Final Answer:

        Add diagonal directions (like (1,1), (1,-1), (-1,1), (-1,-1)) to the directions array -> Option C
      4. Quick Check:

        Include all 8 neighbors for diagonal connectivity [OK]
      Hint: Add diagonal moves to directions for 8-way connectivity [OK]
      Common Mistakes:
      • Ignoring diagonal neighbors
      • Counting only horizontal or vertical neighbors
      • Trying to count without traversal
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard