Bird
Raised Fist0
DSA Cprogramming~10 mins

Minimum Spanning Tree Kruskal's Algorithm in DSA C - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to initialize the parent array for union-find.

DSA C
for (int i = 0; i < n; i++) {
    parent[i] = [1];
}
Drag options to blanks, or click blank then click option'
A-1
B0
Ci
Dn
Attempts:
3 left
💡 Hint
Common Mistakes
Setting all parents to 0 causes incorrect union-find behavior.
Using -1 or n as parent values breaks the find operation.
2fill in blank
medium

Complete the code to find the root parent of a node with path compression.

DSA C
int find(int parent[], int x) {
    if (parent[x] != x) {
        parent[x] = [1];
    }
    return parent[x];
}
Drag options to blanks, or click blank then click option'
Aparent[parent[x]]
Bfind(parent, parent[x])
Cx
Dx + 1
Attempts:
3 left
💡 Hint
Common Mistakes
Assigning parent[x] to x causes infinite recursion.
Using parent[parent[x]] misses path compression.
3fill in blank
hard

Fix the error in the union function to correctly merge two sets.

DSA C
void unionSets(int parent[], int x, int y) {
    int rootX = find(parent, x);
    int rootY = find(parent, y);
    if (rootX != rootY) {
        parent[[1]] = rootY;
    }
}
Drag options to blanks, or click blank then click option'
ArootY
By
Cx
DrootX
Attempts:
3 left
💡 Hint
Common Mistakes
Using x or y instead of root parents causes incorrect unions.
Assigning parent[rootY] = rootX merges sets incorrectly.
4fill in blank
hard

Fill both blanks to correctly sort edges by weight using qsort.

DSA C
int compare(const void *a, const void *b) {
    struct Edge *edgeA = (struct Edge *)[1];
    struct Edge *edgeB = (struct Edge *)[2];
    return edgeA->weight - edgeB->weight;
}
Drag options to blanks, or click blank then click option'
Aa
Bb
C*a
D*b
Attempts:
3 left
💡 Hint
Common Mistakes
Dereferencing a or b before casting causes errors.
Swapping a and b changes sort order.
5fill in blank
hard

Fill all three blanks to add an edge to MST and update total weight.

DSA C
if (find(parent, edges[i].src) != find(parent, edges[i].dest)) {
    unionSets(parent, [1], [2]);
    mstEdges[[3]] = edges[i];
    totalWeight += edges[i].weight;
    count++;
}
Drag options to blanks, or click blank then click option'
Aedges[i].src
Bedges[i].dest
Ccount
Di
Attempts:
3 left
💡 Hint
Common Mistakes
Using i instead of count to index mstEdges overwrites edges.
Swapping src and dest in unionSets causes wrong unions.

Practice

(1/5)
1. What is the main goal of Kruskal's algorithm in graph theory?
easy
A. To sort the vertices of a graph
B. To find the shortest path between two nodes
C. To detect cycles in a graph
D. To find the minimum spanning tree of a graph

Solution

  1. Step 1: Understand Kruskal's algorithm purpose

    Kruskal's algorithm is designed to find a subset of edges that connects all vertices with the minimum total edge weight and no cycles.
  2. Step 2: Compare with other graph algorithms

    Unlike shortest path or cycle detection, Kruskal's focuses on building a minimum spanning tree.
  3. Final Answer:

    To find the minimum spanning tree of a graph -> Option D
  4. Quick Check:

    Kruskal's algorithm = Minimum Spanning Tree [OK]
Hint: Kruskal's always builds minimum spanning tree by edges [OK]
Common Mistakes:
  • Confusing MST with shortest path
  • Thinking it detects cycles only
  • Assuming it sorts vertices
2. Which data structure is commonly used in Kruskal's algorithm to detect cycles efficiently?
easy
A. Disjoint Set (Union-Find)
B. Stack
C. Queue
D. Priority Queue

Solution

  1. Step 1: Identify cycle detection method in Kruskal's

    Kruskal's algorithm uses a Disjoint Set (Union-Find) data structure to check if adding an edge creates a cycle by checking if two vertices belong to the same set.
  2. Step 2: Compare other data structures

    Queue and stack do not help detect cycles efficiently here; priority queue is used for sorting edges but not cycle detection.
  3. Final Answer:

    Disjoint Set (Union-Find) -> Option A
  4. Quick Check:

    Cycle detection in Kruskal's = Union-Find [OK]
Hint: Use Union-Find to quickly check cycles in Kruskal's [OK]
Common Mistakes:
  • Confusing priority queue with cycle detection
  • Using stack or queue for cycle detection
  • Not knowing Union-Find purpose
3. Consider the following edges of a graph with weights:
Edges = [(A-B, 1), (B-C, 4), (A-C, 3), (C-D, 2)]
What is the total weight of the minimum spanning tree found by Kruskal's algorithm?
medium
A. 7
B. 6
C. 8
D. 10

Solution

  1. Step 1: Sort edges by weight

    Sorted edges: (A-B,1), (C-D,2), (A-C,3), (B-C,4)
  2. Step 2: Pick edges without cycles

    Pick (A-B,1), then (C-D,2), then (A-C,3). Adding (B-C,4) creates a cycle, so skip it.
  3. Step 3: Calculate total weight

    Total weight = 1 + 2 + 3 = 6
  4. Final Answer:

    6 -> Option B
  5. Quick Check:

    Sum of MST edges = 6 [OK]
Hint: Sort edges, pick smallest without cycle until all connected [OK]
Common Mistakes:
  • Adding all edges without checking cycles
  • Choosing edges in wrong order
  • Miscounting total weight
4. The following C code snippet is part of Kruskal's algorithm. What is the error?
int findParent(int parent[], int i) {
    if (parent[i] == i)
        return i;
    return findParent(parent, parent[i]);
}

void unionSet(int parent[], int x, int y) {
    int xset = findParent(parent, x);
    int yset = findParent(parent, y);
    parent[xset] = yset;
}
medium
A. unionSet should swap xset and yset
B. unionSet should not change parent array
C. Missing path compression in findParent
D. findParent should return void

Solution

  1. Step 1: Analyze findParent function

    findParent recursively finds the root parent but does not update parent[i] to root, missing path compression optimization.
  2. Step 2: Understand unionSet function

    unionSet correctly merges sets by updating parent of one root to another; no swap needed.
  3. Final Answer:

    Missing path compression in findParent -> Option C
  4. Quick Check:

    Path compression missing = findParent optimization [OK]
Hint: Add path compression to speed up findParent [OK]
Common Mistakes:
  • Thinking unionSet must swap parents
  • Believing findParent should return void
  • Ignoring path compression importance
5. Given a graph with vertices {1, 2, 3, 4} and edges with weights:
(1-2, 5), (1-3, 3), (2-3, 4), (2-4, 2), (3-4, 7)
Using Kruskal's algorithm, which edges will be included in the minimum spanning tree?
hard
A. (2-4), (1-3), (2-3)
B. (1-3), (2-4), (1-2)
C. (2-4), (1-3), (1-2)
D. (1-2), (2-3), (3-4)

Solution

  1. Step 1: Sort edges by weight

    Sorted edges: (2-4,2), (1-3,3), (2-3,4), (1-2,5), (3-4,7)
  2. Step 2: Pick edges without cycles

    Pick (2-4,2), then (1-3,3). Next (2-3,4) connects 2 and 3 which are in different sets, so pick it. After these three edges, all vertices are connected and MST is complete.
  3. Step 3: Verify options

    (2-4), (1-3), (2-3) matches edges (2-4), (1-3), (2-3). (2-4), (1-3), (1-2) includes (1-2) which is heavier than (2-3), so incorrect.
  4. Final Answer:

    (2-4), (1-3), (2-3) -> Option A
  5. Quick Check:

    Pick smallest edges connecting all vertices without cycle [OK]
Hint: Sort edges, pick smallest connecting new vertices until all connected [OK]
Common Mistakes:
  • Choosing heavier edges over lighter ones
  • Adding edges that create cycles
  • Not stopping after n-1 edges
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard