📖 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.
🎯 Goal: Build a program that finds the minimum total cost to connect all computers using Prim's algorithm on a weighted graph.
📋 What You'll Learn
Create an adjacency matrix to represent the graph with exact weights
Create a variable to track the number of vertices
Implement Prim's algorithm to find the minimum spanning tree
Print the edges chosen and the total minimum cost
💡 Why This Matters
🌍 Real World
Network engineers use minimum spanning trees to design cost-efficient networks connecting computers or routers.
💼 Career
Understanding Prim's algorithm helps in roles involving network design, optimization, and graph-based problem solving.
Progress0 / 4 steps
1
Create the graph adjacency matrix
Create a 2D vector called graph with 5 vertices representing the following weighted edges: graph = {{0, 2, 0, 6, 0}, {2, 0, 3, 8, 5}, {0, 3, 0, 0, 7}, {6, 8, 0, 0, 9}, {0, 5, 7, 9, 0}}
DSA C++
Hint
Use vector> to create a 2D matrix with the exact values given.
2
Set the number of vertices
Create an integer variable called V and set it to the number of vertices in the graph, which is 5.
DSA C++
Hint
Count the number of vertices in the graph and assign it to V.
3
Implement Prim's algorithm core logic
Write a function called primMST that takes graph and V as parameters and finds the minimum spanning tree using Prim's algorithm. Use arrays key, parent, and mstSet inside the function. The function should fill parent with the MST edges.
DSA C++
Hint
Use arrays to track the minimum edge weights and visited vertices. Pick the smallest edge each time.
4
Print the MST edges and total cost
In main(), create a parent vector of size V. Call primMST(graph, V, parent). Then print each edge in the MST as parent[i] - i : weight and print the total minimum cost as Total minimum cost: X.
DSA C++
Hint
Loop from 1 to V-1 and print edges from parent[i] to i with their weights. Sum the weights for total cost.
Practice
(1/5)
1. What is the main goal of Prim's Algorithm in graph theory?
easy
A. To find the shortest path between two nodes
B. To detect cycles in a graph
C. To find the minimum spanning tree of a connected weighted graph
D. To sort the vertices of a graph
Solution
Step 1: Understand Prim's Algorithm purpose
Prim's Algorithm is designed to find a tree that connects all vertices with the minimum total edge weight.
Step 2: Differentiate from other graph algorithms
It is not used for shortest path, cycle detection, or sorting vertices, which are different problems.
Final Answer:
To find the minimum spanning tree of a connected weighted graph -> Option C
Quick Check:
Prim's Algorithm = Minimum Spanning Tree [OK]
Hint: Prim's always builds a tree with minimum total edge weight [OK]
Common Mistakes:
Confusing Prim's with shortest path algorithms
Thinking it detects cycles
Assuming it sorts nodes
2. Which of the following is the correct way to initialize the key array in Prim's Algorithm in C++?
easy
A. int key[V]; for(int i=0; i
B. int key[V] = {0};
C. int key[V]; for(int i=0; i
D. int key[V]; for(int i=0; i
Solution
Step 1: Understand key array role
The key array stores minimum edge weights to include each vertex; initially, all are set to a very large value (infinity).
Step 2: Check initialization options
Setting key[i] = INT_MAX correctly represents infinity; other options set to 0 or -1 are incorrect for this purpose.
Final Answer:
int key[V]; for(int i=0; i -> Option A
Quick Check:
Initialize keys with INT_MAX for minimum edge tracking [OK]
Hint: Initialize keys with INT_MAX to represent infinity [OK]
Common Mistakes:
Initializing keys with 0 instead of INT_MAX
Using negative values incorrectly
Not initializing keys at all
3. Consider the following graph with 4 vertices and edges with weights:
What is the total weight of the minimum spanning tree found by Prim's Algorithm starting from vertex 0?
medium
A. 21
B. 19
C. 20
D. 25
Solution
Step 1: Start from vertex 0 and pick minimum edges
Edges from 0: (0-3)=5, (0-2)=6, (0-1)=10. Pick (0-3)=5 first.
Step 2: Add next minimum edge connecting new vertices
From vertices {0,3}, edges are (3-2)=4, (3-1)=15, (0-2)=6, (0-1)=10. Pick (3-2)=4 next.
Step 3: Add last vertex with minimum edge
From {0,3,2}, edges to 1 are (0-1)=10 and (3-1)=15. Pick (0-1)=10.
Step 4: Calculate total weight
Total = 5 + 4 + 10 = 19.
Final Answer:
19 -> Option B
Quick Check:
Sum of chosen edges = 19 [OK]
Hint: Pick smallest edge connecting new vertex each step [OK]
Common Mistakes:
Choosing edges with larger weights first
Not updating the set of included vertices
Adding edges that form cycles
4. The following C++ code snippet is intended to implement Prim's Algorithm but has a bug. What is the error?
const int V = 4;
int key[V] = {INT_MAX, INT_MAX, INT_MAX, INT_MAX};
bool mstSet[V] = {false, false, false, false};
key[0] = 0;
for (int count = 0; count < V - 1; count++) {
int u = -1;
for (int v = 0; v < V; v++) {
if (!mstSet[v] && (u == -1 || key[v] < key[u]))
u = v;
}
mstSet[u] = true;
for (int v = 0; v < V; v++) {
if (graph[u][v] && !mstSet[v] && graph[u][v] < key[v])
key[v] = graph[u][v];
}
}
medium
A. The condition 'graph[u][v]' should check for non-zero edges
B. The loop should run from 0 to V instead of V - 1
C. The key array is not initialized with INT_MAX
D. The variable 'u' is initialized incorrectly inside the loop
Solution
Step 1: Analyze the neighbor update condition
The condition if(graph[u][v] && !mstSet[v] && graph[u][v] < key[v]) uses graph[u][v] as a boolean check (true if non-zero).
Step 2: Identify the bug
This implicit check assumes positive weights and treats 0 as no edge. Standard implementations explicitly use graph[u][v] != 0 to clearly indicate checking for edge existence (non-zero weight).
Step 3: Rule out other options
A: 'u' is correctly initialized to -1 inside each iteration. B: V-1 iterations build the tree correctly. C: key array is initialized with INT_MAX.
Final Answer:
The condition 'graph[u][v]' should check for non-zero edges -> Option A
Quick Check:
Edge check: graph[u][v] != 0 [OK]
Hint: Check edge existence condition carefully for zero weights [OK]