Discover how BFS turns a confusing tangle of connections into clear groups effortlessly!
Why Connected Components Using BFS in DSA C?
Imagine you have a map of cities connected by roads. You want to find groups of cities where you can travel between any two cities without leaving the group. Doing this by checking every possible path manually is like trying to find friends in a huge crowd without any help.
Manually checking connections between cities is slow and confusing. You might miss some connections or check the same roads many times. It's easy to get lost or make mistakes, especially when the map is big.
Using BFS (Breadth-First Search) helps you explore all connected cities step-by-step, like spreading out from one city and visiting all reachable cities before moving on. This way, you find each connected group clearly and quickly without missing any city.
for each city: for each other city: check if connected mark group
for each city: if not visited: BFS(city) mark group
This method lets you quickly find all connected groups in a network, making it easy to understand complex connections.
Social networks use this to find friend groups where everyone is connected directly or through others, helping suggest new friends or communities.
Manual checking is slow and error-prone.
BFS explores connected parts efficiently.
Helps find all connected groups clearly.
Practice
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 AQuick Check:
BFS finds connected components by exploring reachable nodes [OK]
- Thinking BFS only finds shortest paths
- Confusing connected components with edge counts
- Assuming BFS finds node degrees
visited and current node u?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 BQuick Check:
Assign true to mark visited[u] [OK]
- Using == instead of = for assignment
- Assigning 0 instead of true to visited
- Assigning null which is invalid in C
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);
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 AQuick Check:
Two groups found by BFS = 2 [OK]
- Counting edges instead of components
- Misreading adjacency matrix connections
- Forgetting to mark visited nodes
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);
}
}
}
}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 DQuick Check:
Mark visited when enqueueing neighbors [OK]
- Marking visited only after popping from queue
- Incorrect queue initialization
- Wrong loop condition for BFS
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 CQuick Check:
Number of BFS calls = number of connected components [OK]
- Counting edges instead of components
- Miscounting isolated nodes
- Assuming BFS calls equal nodes
Ready to prove it?
Pass the test and this pattern moves unknown
