Advertisement
Kaidul

Kruskal

Oct 23rd, 2012
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.76 KB | None | 0 0
  1. package mst.kruskal;
  2.  
  3. import java.util.*;
  4.  
  5. public class Kruskal {
  6.     /**
  7.      * Minimum spanning tree - Krukal's Algorithm
  8.      * @author Kaidul
  9.      * @category Graph
  10.      */
  11.     static final int MAX = 100;
  12.     int u, v, cost;
  13.     static Kruskal[] k = new Kruskal[MAX];
  14. //  Vector <Integer> parentSet = new Vector <Integer> ();
  15.     static int[] parentSet = new int[100];
  16.    
  17.     void initSet(int _size){
  18. //      parentSet.setSize(_size);
  19.         for (int i = 0; i <= _size; i++) {
  20.             parentSet[i] = i;
  21.         }
  22.     }
  23.    
  24.     static int findSet(int var){
  25.         if (parentSet[var] == var) {
  26.             return var;
  27.         }
  28.         else return parentSet[var] = findSet(parentSet[var]);
  29.     }
  30.    
  31.     static void unionSet(int a, int b){
  32.         if (parentSet[a] == a) {
  33.             parentSet[a] = findSet(b);
  34.             return;
  35.         } else if (parentSet[b] == b)  {
  36.             parentSet[b] = findSet(a);
  37.         } else{
  38.             int m = findSet(a);
  39.             int n = findSet(b);
  40.             parentSet[m] = n;
  41.         }
  42.     }
  43.    
  44.     static Vector <Integer> vec = new Vector <Integer> ();
  45.    
  46.     static void mst(int edge, int vertex){
  47.         int sum = 0;
  48.         for (int i = 0; i < edge; i++) {
  49.             if (findSet(k[i].u) != findSet(k[i].v)) {
  50.                 vec.add(k[i].cost);
  51.                 sum += k[i].cost;
  52.                 unionSet(k[i].u, k[i].v);
  53.             }
  54.         }
  55.         System.out.println("The minimum spanning tree" + sum);
  56.     }
  57.    
  58.     public static void main(String[] args) {
  59.         Scanner input = new Scanner(System.in);
  60.         int vertex_no = input.nextInt();
  61.         int edge_no = input.nextInt();
  62.         for (int i = 0; i < edge_no; i++) {
  63.             k[i].u = input.nextInt();
  64.             k[i].v = input.nextInt();
  65.             k[i].cost = input.nextInt();
  66.         }
  67.         mst(edge_no, vertex_no);
  68.        
  69. //        Scanner input = new Scanner(System.in);
  70. //        while(input.hasNext())
  71. //            System.out.println(input.nextBigInteger()
  72. //               .subtract(input.nextBigInteger()).abs());
  73.     }
  74.  
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement