Bird
Raised Fist0
DSA Pythonprogramming~5 mins

BFS Breadth First Search on Graph in DSA Python - 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 one path 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 keep track of nodes to visit?
AQueue
BStack
CHash Map
DTree
What is the first step in BFS traversal starting from a node?
AAdd all nodes to the queue
BAdd the starting node to the queue and mark it visited
CVisit all neighbors immediately
DMark all nodes as visited
What happens when BFS dequeues a node?
AIt stops the traversal
BIt removes all edges from the graph
CIt visits all unvisited neighbors and adds them to the queue
DIt adds the node back to the queue
Which of these is NOT true about BFS?
AIt explores nodes depth-first
BIt uses a queue
CIt marks nodes as visited
DIt can find shortest path in unweighted graphs
What is the output order of BFS on a graph?
ANodes in decreasing distance from start node
BNodes in reverse order of discovery
CNodes in random order
DNodes in order of increasing distance from start node
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 is useful for finding the shortest path in an unweighted graph.
    Consider how BFS visits nodes closest to start first.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does BFS (Breadth First Search) primarily use to keep track of nodes to visit next in a graph?
      easy
      A. A dictionary to map nodes to their parents
      B. A queue to explore nodes level by level
      C. A set to store visited nodes only
      D. A stack to explore nodes deeply

      Solution

      1. Step 1: Understand BFS traversal method

        BFS explores nodes level by level, visiting all neighbors before moving deeper.
      2. Step 2: Identify the data structure used

        To achieve level order traversal, BFS uses a queue to store nodes to visit next.
      3. Final Answer:

        A queue to explore nodes level by level -> Option B
      4. Quick Check:

        BFS uses queue = D [OK]
      Hint: BFS uses queue for level order traversal [OK]
      Common Mistakes:
      • Confusing BFS with DFS which uses stack
      • Thinking BFS uses only a set without queue
      • Assuming BFS uses recursion instead of queue
      2. Which of the following is the correct Python syntax to initialize a queue for BFS using collections module?
      easy
      A. queue = collections.deque()
      B. queue = list()
      C. queue = collections.Queue()
      D. queue = set()

      Solution

      1. Step 1: Recall Python queue options for BFS

        Python's collections module provides deque which supports fast append and pop from both ends.
      2. Step 2: Identify correct initialization

        collections.Queue() does not exist; list() is slower for queue operations; set() is unordered.
      3. Final Answer:

        queue = collections.deque() -> Option A
      4. Quick Check:

        Use deque for BFS queue = collections.deque() [OK]
      Hint: Use collections.deque() for efficient BFS queue [OK]
      Common Mistakes:
      • Using list() which is slow for queue operations
      • Trying collections.Queue() which is invalid
      • Using set() which is unordered
      3. What is the output of the following BFS traversal starting from node 'A'?
      graph = {
        'A': ['B', 'C'],
        'B': ['D', 'E'],
        'C': ['F'],
        'D': [],
        'E': ['F'],
        'F': []
      }
      
      from collections import deque
      
      def bfs(graph, start):
          visited = []
          queue = deque([start])
          while queue:
              node = queue.popleft()
              if node not in visited:
                  visited.append(node)
                  queue.extend(graph[node])
          return visited
      
      print(bfs(graph, 'A'))
      medium
      A. ['A', 'B', 'C', 'E', 'D', 'F']
      B. ['A', 'C', 'B', 'F', 'D', 'E']
      C. ['A', 'B', 'C', 'D', 'E', 'F']
      D. ['A', 'B', 'C', 'D', 'F', 'E']

      Solution

      1. Step 1: Trace BFS starting from 'A'

        Start with queue=['A'], visited=[] - Pop 'A', visited=['A'], add neighbors 'B','C' to queue - Pop 'B', visited=['A','B'], add 'D','E' - Pop 'C', visited=['A','B','C'], add 'F' - Pop 'D', visited=['A','B','C','D'], no neighbors - Pop 'E', visited=['A','B','C','D','E'], add 'F' - Pop 'F', visited=['A','B','C','D','E','F'], no neighbors
      2. Step 2: Confirm order of visited nodes

        The visited order is ['A', 'B', 'C', 'D', 'E', 'F'] as BFS explores level by level.
      3. Final Answer:

        ['A', 'B', 'C', 'D', 'E', 'F'] -> Option C
      4. Quick Check:

        BFS order from 'A' = ['A', 'B', 'C', 'D', 'E', 'F'] [OK]
      Hint: Follow queue pops and neighbor additions stepwise [OK]
      Common Mistakes:
      • Mixing BFS with DFS order
      • Not checking if node already visited before adding
      • Assuming neighbors added in wrong order
      4. Identify the bug in this BFS code snippet and choose the fix:
      def bfs(graph, start):
          visited = set()
          queue = [start]
          while queue:
              node = queue.pop()
              if node not in visited:
                  visited.add(node)
                  queue.extend(graph[node])
          return list(visited)
      medium
      A. Change queue.pop() to queue.pop(0) to pop from front
      B. Change visited to a list instead of set
      C. Remove the if condition checking visited
      D. Use queue.append(node) instead of extend

      Solution

      1. Step 1: Understand queue behavior in BFS

        BFS requires FIFO order, so nodes must be popped from the front of the queue.
      2. Step 2: Identify the bug in popping nodes

        queue.pop() removes from the end (LIFO), which behaves like DFS. Changing to queue.pop(0) pops from front (FIFO).
      3. Final Answer:

        Change queue.pop() to queue.pop(0) to pop from front -> Option A
      4. Quick Check:

        Use pop(0) for BFS queue pop [OK]
      Hint: BFS queue pops from front: use pop(0) [OK]
      Common Mistakes:
      • Using pop() which pops from end (DFS behavior)
      • Confusing set and list for visited
      • Removing visited check causing infinite loops
      5. Given a graph with possible cycles, how can BFS be modified to avoid infinite loops and correctly return the shortest path length from a start node to a target node?
      hard
      A. Use a stack instead of queue to track nodes
      B. Use DFS instead of BFS to avoid cycles
      C. Remove edges that form cycles before BFS
      D. Use a visited set to track visited nodes and stop when target is found, counting levels

      Solution

      1. Step 1: Understand BFS with cycles

        In graphs with cycles, BFS can revisit nodes infinitely unless visited nodes are tracked.
      2. Step 2: Modify BFS to track visited and count levels

        Use a visited set to avoid revisiting nodes and maintain a level count to find shortest path length. Stop BFS when target node is reached.
      3. Final Answer:

        Use a visited set to track visited nodes and stop when target is found, counting levels -> Option D
      4. Quick Check:

        Visited set + level count = shortest path BFS [OK]
      Hint: Track visited nodes and levels to avoid cycles [OK]
      Common Mistakes:
      • Using DFS which doesn't guarantee shortest path
      • Trying to remove cycles manually before BFS
      • Using stack which causes DFS behavior
      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