📖 Scenario: You are working with a simple network of computers represented as an undirected graph. Each computer is a node, and connections between them are edges. You want to find how many separate groups of connected computers exist in the network.
🎯 Goal: Build a program that uses Breadth-First Search (BFS) to find and count the number of connected components in an undirected graph.
📋 What You'll Learn
Create an adjacency matrix to represent the graph with 6 nodes.
Create a visited array to track visited nodes.
Implement BFS to traverse connected nodes.
Count and print the number of connected components.
💡 Why This Matters
🌍 Real World
Finding connected components helps identify isolated groups in networks like social media, computer networks, or road maps.
💼 Career
Understanding graph traversal and connected components is essential for roles in software development, data analysis, and network engineering.
Progress0 / 4 steps
1
Create the Graph Adjacency Matrix
Create a 6x6 integer adjacency matrix called graph with these exact connections (undirected): edges between nodes 0-1, 0-2, 1-2, 3-4. Use 1 for connected and 0 for no connection. Initialize all other entries to 0.
DSA C
Hint
Use a 2D array with 6 rows and 6 columns. Put 1 where nodes are connected and 0 otherwise.
2
Create the Visited Array
Create an integer array called visited of size 6 and initialize all elements to 0 to track if a node has been visited.
DSA C
Hint
Use an integer array with 6 zeros to mark all nodes as not visited.
3
Implement BFS Function
Write a function called bfs that takes an integer start, the graph adjacency matrix, and the visited array. Use a queue to visit all nodes connected to start. Mark nodes as visited when they are dequeued.
DSA C
Hint
Use an array as a queue with front and rear indices. Mark nodes visited when added to the queue.
4
Count and Print Connected Components
Write a main function that uses bfs to count how many connected components are in the graph. For each node from 0 to 5, if it is not visited, call bfs on it and increment a counter. Then print the count with printf("%d\n", count);.
DSA C
Hint
Loop through all nodes, call bfs if not visited, and count how many times bfs is called. Print the count.
Practice
(1/5)
1. What does the BFS algorithm help find in an undirected graph when used to find 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 number of edges in the graph
D. The degree of each node
Solution
Step 1: Understand BFS traversal in undirected graphs
BFS explores all nodes reachable from a given start node by visiting neighbors level by level.
Step 2: Connect BFS to connected components
By running BFS from an unvisited node, we find 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 visits all nodes in one connected component [OK]
Common Mistakes:
Thinking BFS only finds shortest paths
Confusing connected components with edge counts
Assuming BFS finds node degrees
2. Which of the following is the correct way to mark a node as visited in BFS when using an array named visited and current node u?
easy
A. visited[u] = 0;
B. visited[u] = true;
C. visited[u] == true;
D. visited[u] = null;
Solution
Step 1: Understand marking visited nodes
To mark a node visited, assign true to visited[u], indicating it is visited.
Step 2: Check syntax correctness
Using visited[u] = true; correctly assigns the boolean true. Using == is a comparison, not assignment.
Final Answer:
visited[u] = true; -> Option B
Quick Check:
Assign true to mark visited[u] [OK]
Hint: Use assignment (=), not comparison (==), to mark visited [OK]
Common Mistakes:
Using == instead of = for assignment
Assigning 0 instead of true to visited
Assigning null which is invalid in C
3. Given the following graph adjacency list and BFS code snippet, what is the output number of connected components?
int n = 5;
int adj[5][5] = {
{0,1,0,0,0},
{1,0,0,0,0},
{0,0,0,1,1},
{0,0,1,0,0},
{0,0,1,0,0}
};
bool visited[5] = {false};
int count = 0;
for (int i = 0; i < n; i++) {
if (!visited[i]) {
bfs(i, adj, visited, n);
count++;
}
}
printf("%d\n", count);
medium
A. 2
B. 1
C. 3
D. 4
Solution
Step 1: Analyze adjacency matrix for connected components
Nodes 0 and 1 are connected; nodes 2, 3, 4 form another connected group.
Step 2: Count connected components using BFS
BFS from node 0 visits nodes 0 and 1; BFS from node 2 visits nodes 2, 3, 4. Total components = 2.
Final Answer:
2 -> Option A
Quick Check:
Two groups found by BFS = 2 [OK]
Hint: Count BFS runs on unvisited nodes for components [OK]
Common Mistakes:
Counting edges instead of components
Misreading adjacency matrix connections
Forgetting to mark visited nodes
4. Identify the bug in this BFS function for counting connected components:
void bfs(int start, int adj[][5], bool visited[], int n) {
queue<int> q;
q.push(start);
visited[start] = true;
while (!q.empty()) {
int u = q.front();
q.pop();
for (int v = 0; v < n; v++) {
if (adj[u][v] == 1 && visited[v] == false) {
q.push(v);
}
}
}
}
medium
A. Loop condition should be while(q.size() > 1)
B. Queue is not initialized properly
C. Start node is not marked visited
D. Missing visited[v] = true; inside the loop
Solution
Step 1: Check BFS neighbor processing
When a neighbor v is found unvisited, it must be marked visited immediately to avoid re-adding.
Step 2: Identify missing visited mark
The code pushes v to queue but does not mark visited[v] = true; causing repeated visits.
Final Answer:
Missing visited[v] = true; inside the loop -> Option D
Quick Check:
Mark visited when enqueueing neighbors [OK]
Hint: Mark visited when pushing to queue, not after popping [OK]
Common Mistakes:
Marking visited only after popping from queue
Incorrect queue initialization
Wrong loop condition for BFS
5. You have a graph with 7 nodes and edges: (0-1), (1-2), (3-4), (5-6). Using BFS to find connected components, what is the minimum number of BFS calls needed to find all components?
hard
A. 1
B. 2
C. 3
D. 4
Solution
Step 1: Identify connected components from edges
Edges connect nodes into groups: {0,1,2}, {3,4}, {5,6}. Since nodes are numbered 0 to 6, there are no other nodes.
Step 2: Count connected components
Groups are: {0,1,2}, {3,4}, {5,6} -> 3 components total.
Step 3: BFS calls equal connected components
Each BFS call finds one component, so minimum BFS calls = 3.
Final Answer:
3 -> Option C
Quick Check:
Number of BFS calls = number of connected components [OK]
Hint: Count connected groups; BFS calls = groups [OK]
Common Mistakes:
Counting edges instead of components
Miscounting isolated nodes
Assuming BFS calls equal nodes
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.