Advertisement
minh_tran_782

Bai3_KrusKal_algo

Nov 14th, 2021
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.00 KB | None | 0 0
  1. int  find_set(int i, int* parent) {
  2.   // If i is the parent of itself
  3.   if (i == parent[i])
  4.     return i;
  5.   else
  6.     // Else if i is not the parent of itself
  7.     // Then i is not the representative of his set,
  8.     // so we recursively call Find on its parent
  9.     return find_set(parent[i],parent);
  10. }
  11.  
  12. void  union_set(int u, int v,int* parent) {
  13.   parent[u] = parent[v];
  14. }
  15. int kruskalMST() {
  16.      vector<pair<int, pair<int, int>> > T;  // mst
  17.     int* parent = new int[V];
  18.   for (int i = 0; i < V; i++) parent[i] = i;
  19.      int i, uRep, vRep;
  20.   sort(edges.begin(),edges.end());  // increasing weight
  21.   for (i = 0; i < (int)edges.size(); i++) {
  22.     uRep = find_set(edges[i].second.first,parent);
  23.     vRep = find_set(edges[i].second.second,parent);
  24.     if (uRep != vRep) {
  25.       T.push_back(edges[i]);  // add to tree
  26.       union_set(uRep, vRep,parent);
  27.     }
  28.   }
  29.   int res = 0;
  30.    for (int i = 0; i < (int)T.size(); i++) {
  31.       res = res + T[i].first;
  32.   }
  33.   delete[] parent;
  34.   return res;
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement