What is a connected component in an undirected graph?
A connected component is a group of nodes where each node is reachable from any other node in the same group by following edges.
Click to reveal answer
beginner
What does BFS stand for and what is its role in finding connected components?
BFS stands for Breadth-First Search. It helps explore all nodes reachable from a starting node, allowing us to find all nodes in one connected component.
Click to reveal answer
beginner
In BFS for connected components, why do we mark nodes as visited?
Marking nodes as visited prevents revisiting the same node multiple times, avoiding infinite loops and ensuring each node is counted only once.
Click to reveal answer
intermediate
How do you find all connected components in a graph using BFS?
Start BFS from each unvisited node. Each BFS run finds one connected component. Repeat until all nodes are visited.
Click to reveal answer
intermediate
What is the time complexity of finding connected components using BFS in a graph with V vertices and E edges?
The time complexity is O(V + E) because BFS visits every vertex and edge once.
Click to reveal answer
What data structure is commonly used to implement BFS?
AQueue
BStack
CPriority Queue
DHash Map
✗ Incorrect
BFS uses a queue to explore nodes level by level.
When BFS finishes exploring from one node, what does that represent in terms of connected components?
AOne connected component is fully explored
BAll connected components are found
COnly isolated nodes are found
DGraph is disconnected
✗ Incorrect
BFS from one node explores all nodes in that connected component.
If a graph has 3 connected components, how many times will BFS start from an unvisited node?
A1
B2
C3
DDepends on edges
✗ Incorrect
BFS starts once per connected component from an unvisited node.
Which of these is NOT true about BFS in connected components?
AIt uses a queue
BIt marks nodes as visited
CIt finds all nodes reachable from a start node
DIt explores nodes depth-first
✗ Incorrect
BFS explores nodes breadth-first, not depth-first.
What happens if you do not mark nodes as visited in BFS?
AAlgorithm runs faster
BNodes may be visited multiple times causing infinite loops
CYou find connected components correctly
DGraph becomes disconnected
✗ Incorrect
Without marking visited nodes, BFS can revisit nodes endlessly.
Explain step-by-step how BFS helps find connected components in an undirected graph.
Think about how BFS explores nodes layer by layer and how visited nodes group into components.
You got /5 concepts.
Describe how you would implement a function to return the number of connected components using BFS.
Focus on visiting all nodes and counting BFS runs.
You got /5 concepts.
Practice
(1/5)
1. What does the BFS algorithm help find in an undirected graph when used for connected components?
easy
A. All nodes reachable from a starting node forming one connected component
B. The shortest path between two nodes only
C. The maximum degree of any node in the graph
D. The total number of edges in the graph
Solution
Step 1: Understand BFS in graph context
BFS explores all nodes reachable from a given start node by visiting neighbors level by level.
Step 2: Connect BFS to connected components
Using BFS from an unvisited node finds all nodes in that node's connected component.
Final Answer:
All nodes reachable from a starting node forming one connected component -> Option A
Quick Check:
BFS finds connected components by exploring reachable nodes [OK]
Hint: BFS explores all nodes connected to start node [OK]
Common Mistakes:
Confusing BFS with shortest path only
Thinking BFS counts edges
Mixing BFS with node degree calculation
2. Which of the following is the correct way to initialize a queue for BFS in Python?
easy
A. queue = []
B. queue = dict()
C. queue = set()
D. queue = collections.deque()
Solution
Step 1: Identify BFS queue requirements
BFS requires a queue data structure to process nodes in FIFO order.
Step 2: Choose correct Python queue type
collections.deque() is efficient for queue operations (append and popleft).
Final Answer:
queue = collections.deque() -> Option D
Quick Check:
Use deque for BFS queue in Python [OK]
Hint: Use deque for efficient FIFO queue in BFS [OK]
Common Mistakes:
Using list which is inefficient for popping front
Using set which is unordered
Using dict which is key-value store
3. What is the output of the following code snippet that finds connected components using BFS?
graph = {0: [1], 1: [0, 2], 2: [1], 3: []}
visited = set()
components = []
for node in graph:
if node not in visited:
queue = collections.deque([node])
comp = []
while queue:
current = queue.popleft()
if current not in visited:
visited.add(current)
comp.append(current)
queue.extend(n for n in graph[current] if n not in visited)
components.append(sorted(comp))
print(components)
medium
A. [[0], [1], [2], [3]]
B. [[0, 1], [2, 3]]
C. [[0, 1, 2], [3]]
D. [[3], [0, 1, 2]]
Solution
Step 1: Analyze graph structure
Nodes 0,1,2 are connected; node 3 is isolated.
Step 2: Trace BFS for each component
Starting at 0, BFS visits 0,1,2; then 3 alone forms second component.
Final Answer:
[[0, 1, 2], [3]] -> Option C
Quick Check:
Connected components = [[0,1,2],[3]] [OK]
Hint: Group nodes reachable from each unvisited node [OK]
Common Mistakes:
Not sorting component lists
Mixing isolated node with others
Forgetting to mark visited nodes
4. Identify the bug in this BFS connected components code snippet:
def bfs_components(graph):
visited = set()
components = []
for node in graph:
if node not in visited:
queue = [node]
comp = []
while queue:
current = queue.pop()
if current not in visited:
visited.add(current)
comp.append(current)
for neighbor in graph[current]:
if neighbor not in visited:
queue.append(neighbor)
components.append(comp)
return components
medium
A. Using list pop() removes from end, not front, breaking BFS order
B. Visited set is not updated correctly
C. Neighbors are not checked for visited status
D. Components list is not returned
Solution
Step 1: Check queue operations
Using list pop() removes last element, making it DFS, not BFS.
Step 2: Understand BFS queue behavior
BFS requires FIFO, so pop(0) or deque.popleft() is needed.
Final Answer:
Using list pop() removes from end, not front, breaking BFS order -> Option A