Bird
Raised Fist0
DSA Goprogramming~5 mins

BFS Breadth First Search on Graph in DSA Go - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does BFS stand for in graph traversal?
BFS stands for Breadth First Search, a method to explore all nodes of a graph layer by layer.
Click to reveal answer
beginner
In BFS, which data structure is primarily used to keep track of nodes to visit next?
A queue is used in BFS to keep track of nodes to visit in the order they were discovered.
Click to reveal answer
intermediate
What is the main difference between BFS and DFS in graph traversal?
BFS explores neighbors level by level using a queue, while DFS explores as deep as possible along a branch using a stack or recursion.
Click to reveal answer
beginner
Why do we mark nodes as visited in BFS?
Marking nodes as visited prevents revisiting the same node multiple times, avoiding infinite loops and repeated work.
Click to reveal answer
intermediate
What is the time complexity of BFS on a graph with V vertices and E edges?
The time complexity of BFS is O(V + E), where V is the number of vertices and E is the number of edges.
Click to reveal answer
Which data structure does BFS use to store nodes to visit next?
APriority Queue
BQueue
CStack
DHash Map
What is the first step in BFS traversal starting from a node?
AAdd the starting node to the queue and mark it visited
BAdd all neighbors to the queue
CMark all nodes as visited
DRemove the starting node from the graph
What happens when BFS visits a node's neighbor that is already visited?
AIt skips adding it to the queue again
BIt adds it again to the queue
CIt removes the neighbor from the graph
DIt restarts the BFS
Which of these is a typical use case of BFS?
ADepth-first traversal
BSorting numbers
CFinding the maximum value in a tree
DFinding the shortest path in an unweighted graph
If a graph has 5 vertices and 7 edges, what is the time complexity of BFS?
AO(5)
BO(35)
CO(12)
DO(7)
Explain how BFS works step-by-step on a graph starting from a given node.
Think about how BFS explores nodes layer by layer.
You got /5 concepts.
    Describe why BFS uses a queue and how it helps in finding shortest paths in unweighted graphs.
    Consider the order in which nodes are visited and how that relates to distance.
    You got /5 concepts.

      Practice

      (1/5)
      1. What is the main purpose of BFS (Breadth First Search) on a graph?
      easy
      A. To sort nodes in descending order
      B. To find the shortest path using depth-first traversal
      C. To explore all nodes level by level starting from a source node
      D. To find cycles in a graph using recursion

      Solution

      1. Step 1: Understand BFS traversal

        BFS explores nodes by visiting all neighbors of a node before moving to the next level.
      2. Step 2: Compare BFS with other traversals

        Unlike DFS, BFS uses a queue to explore nodes level by level, which helps in shortest path problems.
      3. Final Answer:

        To explore all nodes level by level starting from a source node -> Option C
      4. Quick Check:

        BFS = Level-wise exploration [OK]
      Hint: BFS uses a queue to explore nodes level by level [OK]
      Common Mistakes:
      • Confusing BFS with DFS
      • Thinking BFS uses recursion
      • Assuming BFS sorts nodes
      2. Which of the following Go code snippets correctly initializes a queue for BFS traversal?
      easy
      A. queue := []int{} // empty slice as queue
      B. queue := make(map[int]bool) // map as queue
      C. queue := 0 // integer as queue
      D. queue := make(chan int) // channel as queue

      Solution

      1. Step 1: Identify data structure for BFS queue

        BFS requires a FIFO structure; a slice can be used as a queue in Go.
      2. Step 2: Check each option

        queue := []int{} // empty slice as queue uses a slice which can enqueue and dequeue elements. queue := make(map[int]bool) // map as queue is a map, not suitable as queue. queue := 0 // integer as queue is an int, not a queue. queue := make(chan int) // channel as queue is a channel, which can be used but requires goroutines and is complex.
      3. Final Answer:

        queue := []int{} // empty slice as queue -> Option A
      4. Quick Check:

        Slice as queue = queue := []int{} // empty slice as queue [OK]
      Hint: Use slice for queue in BFS, not map or int [OK]
      Common Mistakes:
      • Using map instead of slice for queue
      • Using int variable as queue
      • Confusing channels with simple queue
      3. What is the output of the following Go BFS traversal code on the graph below?

      Graph edges:
      0 -> 1, 2
      1 -> 2
      2 -> 0, 3
      3 -> 3

      package main
      import "fmt"
      func bfs(graph map[int][]int, start int) []int {
          visited := make(map[int]bool)
          queue := []int{start}
          order := []int{}
          visited[start] = true
          for len(queue) > 0 {
              node := queue[0]
              queue = queue[1:]
              order = append(order, node)
              for _, neighbor := range graph[node] {
                  if !visited[neighbor] {
                      visited[neighbor] = true
                      queue = append(queue, neighbor)
                  }
              }
          }
          return order
      }
      func main() {
          graph := map[int][]int{
              0: {1, 2},
              1: {2},
              2: {0, 3},
              3: {3},
          }
          fmt.Println(bfs(graph, 2))
      }
      medium
      A. [2, 0, 1, 3]
      B. [2, 0, 3, 1]
      C. [2, 3, 0, 1]
      D. [2, 1, 0, 3]

      Solution

      1. Step 1: Start BFS from node 2

        Initialize queue=[2], visited={2}. Dequeue 2, enqueue neighbors 0 and 3. order=[2]
      2. Step 2: Process nodes in queue

        Queue=[0,3]. Dequeue 0, enqueue neighbor 1 (2 already visited). order=[2,0]. Queue=[3,1]. Dequeue 3, neighbor 3 already visited. order=[2,0,3]. Queue=[1]. Dequeue 1, neighbor 2 visited. order=[2,0,3,1]. Queue empty.
      3. Final Answer:

        [2, 0, 3, 1] -> Option B
      4. Quick Check:

        BFS order from 2 = [2,0,3,1] [OK]
      Hint: Track queue and visited sets stepwise [OK]
      Common Mistakes:
      • Not marking visited before enqueue
      • Wrong order of neighbors enqueued
      • Confusing BFS with DFS order
      4. Identify the bug in the following BFS Go code snippet and select the correct fix.

      func bfs(graph map[int][]int, start int) []int {
          visited := make(map[int]bool)
          queue := []int{start}
          order := []int{}
          for len(queue) > 0 {
              node := queue[0]
              queue = queue[1:]
              order = append(order, node)
              for _, neighbor := range graph[node] {
                  if !visited[neighbor] {
                      queue = append(queue, neighbor)
                      visited[neighbor] = true
                  }
              }
          }
          return order
      }
      medium
      A. Mark start node as visited before loop
      B. Initialize order slice with capacity
      C. Use a stack instead of queue
      D. Remove visited map entirely

      Solution

      1. Step 1: Check visited marking for start node

        The code never marks the start node as visited before starting, so it may revisit it.
      2. Step 2: Fix by marking start visited before loop

        Adding visited[start] = true before the loop prevents revisiting the start node and infinite loops.
      3. Final Answer:

        Mark start node as visited before loop -> Option A
      4. Quick Check:

        Start visited before loop = Mark start node as visited before loop [OK]
      Hint: Always mark start visited before BFS loop [OK]
      Common Mistakes:
      • Marking visited after enqueue
      • Using stack instead of queue
      • Ignoring visited map
      5. Given a directed graph represented as adjacency list, how can BFS be adapted to find the shortest path length from a start node to a target node? Choose the best approach.
      hard
      A. Use BFS but enqueue nodes multiple times to find shortest path
      B. Use DFS and backtrack to find all paths, then pick shortest
      C. Use BFS but ignore visited nodes to explore all paths
      D. Use BFS with a distance map to track levels from start, stop when target found

      Solution

      1. Step 1: Understand BFS for shortest path

        BFS explores nodes level by level, so the first time target is reached is the shortest path.
      2. Step 2: Use a distance map to track levels

        Maintain a map to record distance from start for each node. When target is dequeued, return its distance.
      3. Final Answer:

        Use BFS with a distance map to track levels from start, stop when target found -> Option D
      4. Quick Check:

        BFS + distance map = shortest path [OK]
      Hint: Track distance in BFS, stop at target [OK]
      Common Mistakes:
      • Using DFS for shortest path in unweighted graph
      • Ignoring visited nodes causing infinite loops
      • Enqueuing nodes multiple times unnecessarily
      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