📖 Scenario: You are working as a network engineer. You need to connect several computers with cables. Each cable has a cost. Your goal is to connect all computers with the least total cost without any loops.
🎯 Goal: Build a program that uses Kruskal's algorithm to find the minimum spanning tree (MST) of a given weighted graph. The MST connects all nodes with the smallest total edge cost.
📋 What You'll Learn
Create a list of edges with exact weights and nodes
Create a parent array for union-find with exact initialization
Implement the union-find functions findParent and unionSets
Sort edges by weight using std::sort
Build MST by adding edges without creating cycles
Print the MST edges and total cost exactly as specified
💡 Why This Matters
🌍 Real World
Network design, circuit design, and clustering problems often require connecting points with minimum total cost without loops.
💼 Career
Understanding MST algorithms like Kruskal's is essential for software engineers working on network optimization, infrastructure planning, and graph-based problem solving.
Progress0 / 4 steps
1
Create the graph edges
Create a vector of tuples called edges with these exact entries: {0, 1, 10}, {0, 2, 6}, {0, 3, 5}, {1, 3, 15}, {2, 3, 4}. Each tuple represents an edge with (node1, node2, weight).
DSA C++
Hint
Use std::vector and std::tuple to store edges as (node1, node2, weight).
2
Initialize the parent array for union-find
Create a vector of integers called parent with size 4. Initialize it so that each element is its own index: parent = {0, 1, 2, 3}.
DSA C++
Hint
Use std::vector parent = {0, 1, 2, 3}; to initialize.
3
Implement union-find and build MST
Write the functions findParent and unionSets to manage the parent array. Then sort edges by weight using std::sort. Use a for loop with variables u, v, w to iterate over edges. For each edge, if findParent(u) != findParent(v), call unionSets(u, v) and add the edge to a vector called mst. Also keep track of the total cost in an integer variable totalCost.
DSA C++
Hint
Use recursion with path compression in findParent. Use std::sort with a lambda to sort edges by weight. Loop over edges and use union-find to avoid cycles.
4
Print the MST edges and total cost
Use a for loop with variables u, v, w to iterate over mst. Print each edge in the format: "Edge: u - v with weight w". After the loop, print the total cost in the format: "Total cost of MST: totalCost".
DSA C++
Hint
Use a for loop to print each edge in mst. Then print the total cost.
Practice
(1/5)
1. What is the main goal of Kruskal's Algorithm in graph theory?
easy
A. To find the minimum spanning tree of a connected weighted graph
B. To find the shortest path between two nodes
C. To detect cycles in a graph
D. To sort the vertices of a graph
Solution
Step 1: Understand the purpose of Kruskal's Algorithm
Kruskal's Algorithm is designed to find a subset of edges that connects all vertices with the minimum total edge weight and no cycles.
Step 2: Compare with other graph algorithms
Unlike shortest path or cycle detection, Kruskal's specifically builds a minimum spanning tree.
Final Answer:
To find the minimum spanning tree of a connected weighted graph -> Option A
Quick Check:
Minimum Spanning Tree = Find minimum edges connecting all nodes [OK]
Hint: Kruskal connects all nodes with least total edge weight [OK]
Common Mistakes:
Confusing MST with shortest path
Thinking it detects cycles only
Assuming it sorts vertices
2. Which of the following is the correct way to sort edges by weight in C++ for Kruskal's Algorithm?
easy
A. std::sort(edges.begin(), edges.end(), [](auto &a, auto &b){ return a.weight < b.weight; });
B. std::sort(edges, edges + n, [](auto a, auto b){ return a.weight > b.weight; });
C. sort(edges.begin(), edges.end(), compareEdges); // where compareEdges returns a.weight > b.weight
D. edges.sort([](auto a, auto b){ return a.weight < b.weight; });
Solution
Step 1: Identify correct sorting syntax for vector of edges
Using std::sort with iterators edges.begin() and edges.end() is correct for vectors.
Step 2: Check lambda comparator correctness
The comparator should return true if first edge weight is less than second for ascending order.
Final Answer:
std::sort(edges.begin(), edges.end(), [](auto &a, auto &b){ return a.weight < b.weight; }); -> Option A
Quick Check:
Sort edges ascending by weight using std::sort with correct lambda [OK]
Hint: Use std::sort with begin/end and lambda returning a.weight < b.weight [OK]
Common Mistakes:
Using wrong iterator syntax for vector
Reversing comparator logic
Calling sort on vector object directly
3. Given the following edges of a graph: edges = { {1, 2, 3}, {2, 3, 1}, {1, 3, 2} } where each tuple is (u, v, weight). What is the total weight of the MST found by Kruskal's Algorithm?
medium
A. 4
B. 5
C. 3
D. 6
Solution
Step 1: Sort edges by weight
Sorted edges by weight: (2,3,1), (1,3,2), (1,2,3)
Step 2: Pick edges without forming cycles
Pick (2,3,1), then (1,3,2). Adding (1,2,3) forms a cycle, so skip.
Final Answer:
1 + 2 = 3 -> Option C
Quick Check:
Sum of selected edges = 1 + 2 = 3 [OK]
Hint: Pick edges from smallest weight, skip if cycle forms [OK]
Common Mistakes:
Adding all edges without checking cycles
Choosing edges in wrong order
Misreading edge weights
4. Consider this snippet for Kruskal's Algorithm union-find step:
What is the likely error if the MST weight is incorrect?
medium
A. Union operation is called before checking if sets are different
B. The find function does not use path compression
C. The unionSet function does not update parent correctly
D. Edges are not sorted by weight before processing
Solution
Step 1: Analyze union-find usage
The code correctly checks if u and v belong to different sets before union and adding weight.
Step 2: Check prerequisites for Kruskal's correctness
Kruskal requires edges sorted by weight ascending before processing; missing this causes incorrect MST weight.
Final Answer:
Edges are not sorted by weight before processing -> Option D
Quick Check:
Sorting edges first is essential for correct MST [OK]
Hint: Always sort edges by weight before union-find steps [OK]
Common Mistakes:
Ignoring edge sorting
Assuming union-find alone fixes MST
Confusing path compression with correctness
5. You have a graph with 5 nodes and edges: {(1,2,2), (1,3,3), (2,3,1), (2,4,4), (3,5,5), (4,5,7)} Using Kruskal's Algorithm, which edges will be included in the MST?