Advertisement
Guest User

Untitled

a guest
Apr 24th, 2014
38
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.08 KB | None | 0 0
  1. import java.io.IOException;
  2. import java.util.ArrayList;
  3. import java.util.Comparator;
  4. import java.util.HashSet;
  5. import java.util.Iterator;
  6. import java.util.PriorityQueue;
  7. import java.util.Queue;
  8.  
  9. class link {
  10.     int a; //Куда направлено ребро
  11.     int mom; //Откуда
  12.     int ves;
  13.     link(int tsel, int parent, int vesSvyazi) {
  14.         a = tsel;
  15.         mom = parent;
  16.         ves = vesSvyazi;
  17.     }
  18. }
  19.  
  20. class Comp implements Comparator<link> {
  21.     @Override
  22.     public int compare(link t, link t1) {
  23.         Integer a = t.ves;
  24.         Integer b = t1.ves;
  25.         return a.compareTo(b);
  26.     }
  27. }
  28.  
  29. public class Kruskal {
  30.     static ArrayList<link>[] graf;
  31.     static HashSet<HashSet<Integer>> mnozh;
  32.     final static int numLinks = 17;
  33.     final static int numVersh = 10;
  34.  
  35.     static void init() {
  36.         graf[0].add(new link(1, 0, 8));
  37.         graf[0].add(new link(2, 0, 6));
  38.         graf[0].add(new link(3, 0, 10));
  39.  
  40.         graf[1].add(new link(4, 1, 1));
  41.  
  42.         graf[2].add(new link(5, 2, 8));
  43.         graf[2].add(new link(6, 2, 6));
  44.  
  45.         graf[3].add(new link(6, 3, 1));
  46.  
  47.         graf[4].add(new link(9, 4, 2));
  48.  
  49.         graf[5].add(new link(1, 5, 5));
  50.  
  51.         graf[6].add(new link(8, 6, 1));
  52.  
  53.         graf[7].add(new link(3, 7, 7));
  54.         graf[7].add(new link(9, 7, 3));
  55.  
  56.         graf[8].add(new link(7, 8, 4));
  57.         graf[8].add(new link(9, 8, 8));
  58.         graf[8].add(new link(3, 8, 1));
  59.         graf[8].add(new link(5, 8, 4));
  60.  
  61.         graf[9].add(new link(5, 9, 2));
  62.     }
  63.  
  64.     public static void main(String[] args) throws IOException {
  65.         Queue<link> q = new PriorityQueue(numLinks, new Comp());
  66.         ArrayList<link> minOstGraf = new ArrayList();
  67.         graf = new ArrayList[numVersh];
  68.         mnozh = new HashSet<>();
  69.         for (int i = 0; i < numVersh; i++) {
  70.             graf[i] = new ArrayList<>();
  71.             HashSet<Integer> vr = new HashSet();
  72.             vr.add(i);
  73.             mnozh.add(vr);
  74.         }
  75.         init();
  76.  
  77.         //Заполняем очередь
  78.         for (int i = 0; i < numVersh; i++) {
  79.             Iterator<link> itr = graf[i].iterator();
  80.             while (itr.hasNext()) {
  81.                 q.offer(itr.next());
  82.             }
  83.         }
  84.         for (; q.size() > 0;) {
  85.             link lka = q.poll();
  86.             System.out.println(lka.mom + " " + lka.a);
  87.  
  88.             //Проход по множеству
  89.             Iterator<HashSet<Integer>> itr1 = mnozh.iterator();
  90.             label1:
  91.             for (; itr1.hasNext();) {
  92.                 HashSet<Integer> mom = itr1.next(); //Запоминаем множество 1
  93.                 if (mom.contains(lka.mom) && !mom.contains(lka.a)) {
  94.                     //Проход по множеству во множестве
  95.                     Iterator<HashSet<Integer>> itr2 = mnozh.iterator();
  96.                     while (itr2.hasNext()) {
  97.                         HashSet<Integer> son = itr2.next(); //Запоминаем множество 2
  98.                         if (son.contains(lka.a)) {
  99.                             mom.addAll(son); //Слияние множеств 1 и 2
  100.                             minOstGraf.add(lka);
  101.                             System.out.println(son + " поглощается..");
  102.                             son.clear();
  103.                             break label1;
  104.                         }
  105.                     }
  106.                 }
  107.             }
  108.  
  109.             //Вывод множеств для наглядности
  110.             Iterator<HashSet<Integer>> itr = mnozh.iterator();
  111.             for (int i = 0; itr.hasNext(); i++) {
  112.                 System.out.print(itr.next() + " ");
  113.             }
  114.             System.out.println();
  115.         }
  116.         System.out.println("Связи готового дерева:");
  117.         for (int i = 0; i < minOstGraf.size(); i++) {
  118.             char a = 'a', b = 'a';
  119.             a += minOstGraf.get(i).mom;
  120.             b += minOstGraf.get(i).a;
  121.             System.out.println(a + "" + b + " Вес: " + minOstGraf.get(i).ves);
  122.         }
  123.     }
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement