Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct vertex
- {
- int parent, size;
- };
- struct edge
- {
- int from, to, weight;
- };
- std::vector<edge> Kruskal(std::vector<std::vector<edge>>& edges)
- {
- std::vector<edge> min_tree;
- // If there are no edges, return a null-tree
- if (edges.size() < 2)
- return min_tree;
- // Sort the edges by increasing weight
- std::sort(edges.begin(), edges.end(), [](edge& l, edge& r) -> bool {
- return l.weight < r.weight;
- });
- // Keep adding edges that merge merge connected components until there is one connected component left
- for (edge& e : edges)
- if (ds_union(e.from, e.to))
- {
- min_tree.push_back(e);
- if (min_tree.size() == vertices.size() - 1)
- return min_tree;
- }
- // If this point has been reached, the original graph isn't connected
- return min_tree;
- }
Add Comment
Please, Sign In to add comment