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, 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 visits all neighbors level by level from a starting land cell, marking connected land cells as visited to count one island.
Click to reveal answer
beginner
In the Number of Islands problem, why do we mark visited cells?
To avoid counting the same land cell multiple times and to prevent infinite loops during traversal.
Click to reveal answer
intermediate
What data structures are commonly used for BFS and DFS in the Number of Islands problem?
DFS uses recursion or a stack; BFS uses a queue to keep track of cells to visit next.
Click to reveal answer
What does a '1' represent in the Number of Islands grid?
ALand
BWater
CVisited cell
DObstacle
Which traversal method uses a queue to explore neighbors?
ABreadth-First Search (BFS)
BDepth-First Search (DFS)
CBinary Search
DLinear Search
Why do we need to mark cells as visited in the Number of Islands problem?
ATo find the largest island
BTo count water cells
CTo sort the grid
DTo avoid revisiting and recounting the same island
Which of these is NOT a valid neighbor direction in the Number of Islands problem?
AUp
BDiagonal
CLeft
DDown
What is the time complexity of the Number of Islands solution using BFS or DFS?
AO(n^2) where n is grid size
BO(n!)
CO(m*n) where m and n are grid dimensions
DO(log n)
Explain how DFS is used to count islands in a grid.
Think about exploring all connected parts of one island before moving on.
You got /4 concepts.
    Describe the difference between BFS and DFS approaches in the Number of Islands problem.
    Focus on traversal order and data structures used.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does the "Number of Islands" problem typically ask you to find in a 2D grid?
      easy
      A. Calculate the perimeter of islands
      B. Find the largest island size
      C. Replace all '1's with '0's
      D. Count how many groups of connected '1's (land) exist

      Solution

      1. Step 1: Understand the problem statement

        The problem asks to count distinct islands, where islands are groups of connected '1's (land) in the grid.
      2. Step 2: Identify what is being counted

        We count how many separate groups of connected land cells exist, not their size or perimeter.
      3. Final Answer:

        Count how many groups of connected '1's (land) exist -> Option D
      4. Quick Check:

        Number of islands = count of connected land groups [OK]
      Hint: Islands = connected groups of '1's in grid [OK]
      Common Mistakes:
      • Confusing island count with island size
      • Counting water cells instead of land
      • Ignoring connectivity rules (horizontal and vertical)
      2. Which of the following C# code snippets correctly initializes a 2D char array representing a grid for the Number of Islands problem?
      easy
      A. char[,] grid = new char[][] { {'1','0'}, {'0','1'} };
      B. char[,] grid = { {'1','0'}, {'0','1'} };
      C. char[][] grid = new char[][] { new char[] {'1','0'}, new char[] {'0','1'} };
      D. char[][] grid = new char[2][2] { {'1','0'}, {'0','1'} };

      Solution

      1. Step 1: Understand C# 2D array initialization

        In C#, jagged arrays (array of arrays) are declared as char[][] and initialized with new char[][] and inner arrays. Number of Islands uses jagged arrays for grid[r][c] access and grid[0].Length.
      2. Step 2: Check each option's syntax

        char[][] grid = new char[][] { new char[] {'1','0'}, new char[] {'0','1'} };: char[][] grid = new char[][] { new char[] {'1','0'}, new char[] {'0','1'} }; correctly uses jagged array syntax.
        char[,] grid = new char[][] { {'1','0'}, {'0','1'} };: declares char[,] (rectangular) but tries jagged init - type mismatch.
        char[,] grid = { {'1','0'}, {'0','1'} };: valid rectangular char[,], but incompatible with grid[r][c] and grid[0].Length.
        char[][] grid = new char[2][2] { {'1','0'}, {'0','1'} };: new char[2][2] invalid syntax (incorrect brackets).
      3. Final Answer:

        char[][] grid = new char[][] { new char[] {'1','0'}, new char[] {'0','1'} }; -> Option C
      4. Quick Check:

        Jagged array with new keyword = correct syntax [OK]
      Hint: Use 'new' keyword for jagged arrays in C# [OK]
      Common Mistakes:
      • Omitting 'new' keyword in array initialization
      • Confusing jagged arrays with rectangular arrays
      • Using wrong braces or missing inner arrays
      3. Given the following grid and BFS-based code snippet, what is the output (number of islands)?
      char[][] grid = new char[][] {
        new char[] {'1','1','0','0'},
        new char[] {'1','0','0','1'},
        new char[] {'0','0','1','1'},
        new char[] {'0','0','0','0'}
      };
      
      int CountIslands(char[][] grid) {
        int count = 0;
        int rows = grid.Length;
        int cols = grid[0].Length;
        bool[][] visited = new bool[rows][];
        for (int i = 0; i < rows; i++) visited[i] = new bool[cols];
      
        for (int r = 0; r < rows; r++) {
          for (int c = 0; c < cols; c++) {
            if (grid[r][c] == '1' && !visited[r][c]) {
              BFS(r, c, grid, visited);
              count++;
            }
          }
        }
        return count;
      }
      
      void BFS(int r, int c, char[][] grid, bool[][] visited) {
        int[] dr = { -1, 1, 0, 0 };
        int[] dc = { 0, 0, -1, 1 };
        Queue<(int, int)> queue = new Queue<(int, int)>();
        queue.Enqueue((r, c));
        visited[r][c] = true;
      
        while (queue.Count > 0) {
          var (row, col) = queue.Dequeue();
          for (int i = 0; i < 4; i++) {
            int nr = row + dr[i];
            int nc = col + dc[i];
            if (nr >= 0 && nr < grid.Length && nc >= 0 && nc < grid[0].Length && grid[nr][nc] == '1' && !visited[nr][nc]) {
              queue.Enqueue((nr, nc));
              visited[nr][nc] = true;
            }
          }
        }
      }
      
      Console.WriteLine(CountIslands(grid));
      medium
      A. 3
      B. 2
      C. 4
      D. 1

      Solution

      1. Step 1: Analyze the grid for connected islands

        Islands are groups of '1's connected horizontally or vertically. The grid has these islands:
        - Island 1: (0,0),(0,1),(1,0)
        - Island 2: (1,3)
        - Island 3: (2,2),(2,3)
      2. Step 2: BFS visits each island once

        The BFS marks all connected '1's as visited. Each BFS call increments count by 1. Total BFS calls = number of islands = 3.
      3. Final Answer:

        3 -> Option A
      4. Quick Check:

        Count islands by BFS calls = 3 [OK]
      Hint: Count BFS calls on unvisited '1's = number of islands [OK]
      Common Mistakes:
      • Counting diagonally connected '1's as one island
      • Missing isolated single '1's as islands
      • Not marking visited cells properly
      4. Identify the bug in the following DFS code for counting islands and select the correct fix:
      void DFS(int r, int c, char[][] grid, bool[][] visited) {
        if (r < 0 || r >= grid.Length || c < 0 || c >= grid[0].Length || grid[r][c] == '0')
          return;
        visited[r][c] = true;
        DFS(r - 1, c, grid, visited);
        DFS(r + 1, c, grid, visited);
        DFS(r, c - 1, grid, visited);
        DFS(r, c + 1, grid, visited);
      }
      
      int CountIslands(char[][] grid) {
        int count = 0;
        int rows = grid.Length;
        int cols = grid[0].Length;
        bool[][] visited = new bool[rows][];
        for (int i = 0; i < rows; i++) visited[i] = new bool[cols];
      
        for (int r = 0; r < rows; r++) {
          for (int c = 0; c < cols; c++) {
            if (grid[r][c] == '1' && !visited[r][c]) {
              DFS(r, c, grid, visited);
              count++;
            }
          }
        }
        return count;
      }
      medium
      A. Change grid[r][c] == '0' to grid[r][c] == '1' in base case
      B. Add a check for visited[r][c] before recursive DFS calls
      C. Initialize visited array with 'true' instead of 'false'
      D. Remove visited array and rely on grid modification

      Solution

      1. Step 1: Identify missing visited check in DFS

        The DFS function does not check if a cell is already visited before recursive calls, causing infinite recursion or revisiting.
      2. Step 2: Fix by adding visited check before recursion

        Adding "if (visited[r][c]) return;" before marking visited prevents revisiting cells and infinite loops.
      3. Final Answer:

        Add a check for visited[r][c] before recursive DFS calls -> Option B
      4. Quick Check:

        Prevent revisiting by checking visited before DFS calls [OK]
      Hint: Always check visited before DFS recursion to avoid loops [OK]
      Common Mistakes:
      • Not checking visited before recursion
      • Confusing base case conditions
      • Modifying grid instead of using visited array
      5. You want to modify the Number of Islands solution to count islands considering diagonal connections as well (8 directions). Which change is needed in the BFS or DFS traversal?
      hard
      A. Add diagonal directions (-1,-1), (-1,1), (1,-1), (1,1) to the direction arrays
      B. Only check horizontal neighbors, ignore vertical and diagonal
      C. Use a stack instead of a queue for BFS
      D. Change grid cells from '1' to '2' when visited

      Solution

      1. Step 1: Understand connectivity rules

        Original problem connects cells horizontally and vertically (4 directions). To include diagonals, add those directions.
      2. Step 2: Modify direction arrays for 8 directions

        Add diagonal moves (-1,-1), (-1,1), (1,-1), (1,1) to dr and dc arrays to explore all neighbors.
      3. Final Answer:

        Add diagonal directions (-1,-1), (-1,1), (1,-1), (1,1) to the direction arrays -> Option A
      4. Quick Check:

        Include diagonals by adding their directions [OK]
      Hint: Add diagonal moves to directions for 8-way connectivity [OK]
      Common Mistakes:
      • Ignoring diagonal neighbors
      • Confusing BFS and DFS data structures
      • Changing grid values instead of using visited array
      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