keverman

Kruskal's algorithm (MST)

May 11th, 2019 (edited)
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.88 KB | None | 0 0
  1. struct vertex
  2. {
  3.     int parent, size;
  4. };
  5.  
  6. struct edge
  7. {
  8.     int from, to, weight;
  9. };
  10.  
  11. std::vector<edge> Kruskal(std::vector<std::vector<edge>>& edges)
  12. {
  13.     std::vector<edge> min_tree;
  14.  
  15.     // If there are no edges, return a null-tree
  16.     if (edges.size() < 2)
  17.         return min_tree;
  18.  
  19.     // Sort the edges by increasing weight
  20.     std::sort(edges.begin(), edges.end(), [](edge& l, edge& r) -> bool {
  21.             return l.weight < r.weight;
  22.         });
  23.  
  24.     // Keep adding edges that merge merge connected components until there is one connected component left
  25.     for (edge& e : edges)
  26.         if (ds_union(e.from, e.to))
  27.         {
  28.             min_tree.push_back(e);
  29.             if (min_tree.size() == vertices.size() - 1)
  30.                 return min_tree;
  31.         }
  32.  
  33.     // If this point has been reached, the original graph isn't connected
  34.     return min_tree;
  35. }
Add Comment
Please, Sign In to add comment