Advertisement
Guest User

Untitled

a guest
Jun 19th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.55 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package lapr.project.utils;
  7.  
  8. import java.util.ArrayList;
  9. import java.util.Collections;
  10. import java.util.Comparator;
  11. import java.util.List;
  12. import lapr.project.model.Stand;
  13.  
  14.  
  15. /**
  16.  *
  17.  * @author UndefinedGadget
  18.  */
  19. public class Kruskal {
  20.    
  21.     public Kruskal() {
  22.     }
  23.    
  24.     private Graph graph;
  25.     private int numberVertex;
  26.     private List<Edge>edgesSorted  = new ArrayList<>();
  27.     private List<String> vertex = new ArrayList<>();
  28.    
  29.     public void initialize() {
  30.         graph = new Graph();
  31.         Stand A = new Stand(10, "A");
  32.         Stand B = new Stand(20, "B");
  33.         Stand C = new Stand(30, "C");
  34.         Stand D = new Stand(40, "D");
  35.         Stand E = new Stand(50, "E");
  36.         Stand F = new Stand(60, "F");
  37.         Stand G = new Stand(70, "G");
  38.         Stand H = new Stand(80, "H");
  39.         Stand I = new Stand(90, "I");
  40.        
  41.         graph.addEdge(new Edge(B, C, 5));
  42.         graph.addEdge(new Edge(E, G, 6));
  43.         graph.addEdge(new Edge(A, C, 7));
  44.         graph.addEdge(new Edge(C, D, 7));
  45.         graph.addEdge(new Edge(F, H, 8));
  46.         graph.addEdge(new Edge(C, E, 9));
  47.         graph.addEdge(new Edge(A, B, 9));
  48.         graph.addEdge(new Edge(B, E, 10));
  49.         graph.addEdge(new Edge(D, F, 10));
  50.         graph.addEdge(new Edge(A, D, 12));
  51.         graph.addEdge(new Edge(E, F, 12));
  52.         graph.addEdge(new Edge(C, F, 13));
  53.         graph.addEdge(new Edge(H, I, 15));
  54.         graph.addEdge(new Edge(G, H, 16));
  55.         graph.addEdge(new Edge(G, I, 17));
  56.         graph.addEdge(new Edge(B, G, 18));
  57.         graph.addEdge(new Edge(E, I, 18));
  58.         graph.addEdge(new Edge(D, H, 20));
  59.         graph.addEdge(new Edge(F, I, 20));
  60.        
  61. //        graph.addEdge(new Edge(A, B, 10));
  62. //        graph.addEdge(new Edge(A, C, 12));
  63. //        graph.addEdge(new Edge(A, E, 15));
  64. //        graph.addEdge(new Edge(B, D, 1));
  65. //        graph.addEdge(new Edge(B, E, 5));
  66. //        graph.addEdge(new Edge(C, E, 2));
  67. //        graph.addEdge(new Edge(C, F, 3));
  68. //        graph.addEdge(new Edge(D, E, 3));
  69. //        graph.addEdge(new Edge(D, G, 8));
  70. //        graph.addEdge(new Edge(E, G, 11));
  71. //        graph.addEdge(new Edge(E, H, 6));
  72. //        graph.addEdge(new Edge(E, F, 5));
  73. //        graph.addEdge(new Edge(F, H, 4));
  74. //        graph.addEdge(new Edge(G, H, 10));
  75. //        graph.addEdge(new Edge(H, I, 9));
  76. //        graph.addEdge(new Edge(G, I, 7));
  77.        
  78.         String sort = "";
  79.         edgesSorted = graph.getEdges();
  80.         Collections.sort(edgesSorted, edgesCriteria);
  81.         for (Edge e : edgesSorted) {
  82.             sort = sort + "(" + e.getInitialVertex().getDescription() + ", " + e.getEndVertex().getDescription() + "), ";
  83.         }
  84.         System.out.println("Edges sorted: " + sort);
  85.        
  86.         countVertex();
  87.         System.out.println("Number of vertices: " + numberVertex);
  88.        
  89.         calculateMinimumCable();
  90.     }
  91.    
  92.     Comparator<Edge> edgesCriteria =(Edge o1, Edge o2) -> {
  93.         if (o1.getDistance() > o2.getDistance()) {
  94.             return 1;
  95.         } else {
  96.             if (o1.getDistance() < o2.getDistance()) {
  97.                 return -1;
  98.             } else {
  99.                 return 0;
  100.             }
  101.         }
  102.     };
  103.    
  104.     public void calculateMinimumCable() {
  105.         String ttt = "";
  106.         double totalDistance = 0;
  107.         String tree = "";
  108.         List<String> vertexCopy = new ArrayList<>(vertex);
  109.         for (int a = 0; a < edgesSorted.size(); a++) {
  110.             String start = edgesSorted.get(a).getInitialVertex().getDescription();
  111.             String end = edgesSorted.get(a).getEndVertex().getDescription();
  112.             for (int i = 0; i < vertex.size(); i++) {
  113.                 if (vertex.get(i).contains(start)&& !vertex.get(i).contains(end) ) {
  114.                     String aux = "";
  115.                     for (int j = 0; j < vertex.size() - 1; j++) {
  116.                         if (vertex.get(j).contains(end)) {
  117.                             aux = vertex.get(j);
  118.                             vertexCopy.remove(aux);
  119.                             System.out.println("(" + edgesSorted.get(a).getInitialVertex().getDescription() + ", " + edgesSorted.get(a).getEndVertex().getDescription() + ")");
  120.                             tree = tree + "(" + edgesSorted.get(a).getInitialVertex().getDescription() + ", " + edgesSorted.get(a).getEndVertex().getDescription() + "), ";
  121.                             totalDistance = totalDistance + edgesSorted.get(a).getDistance();
  122.                         }
  123.                     }
  124.                     try {
  125.                     String temp = vertex.get(i) + aux;
  126.                     vertexCopy.set(i,temp);
  127.                     vertexCopy.remove(end);
  128.                     } catch (IndexOutOfBoundsException e) {
  129.                         System.out.println("Tree: " + tree);
  130.                         System.out.println("Total Distance = " + totalDistance + "m");
  131.                     }
  132.                 }
  133.             }
  134.             for (String v : vertex) {
  135.                 ttt = ttt + v + " ";
  136.             }
  137.             System.out.println(ttt);
  138.             ttt = "";
  139.             vertex = vertexCopy;
  140.         }
  141.         System.out.println("Tree: " + tree);
  142.         System.out.println("Total Distance = " + totalDistance + "m");
  143.     }
  144.    
  145.     public void countVertex() {
  146.         edgesSorted.stream().map((e) -> {
  147.             if (!vertex.contains(e.getInitialVertex().getDescription())) {
  148.                 vertex.add(e.getInitialVertex().getDescription());
  149.             }
  150.             return e;
  151.         }).filter((e) -> (!vertex.contains(e.getEndVertex().getDescription()))).forEachOrdered((e) -> {
  152.             vertex.add(e.getEndVertex().getDescription());
  153.         });
  154.         numberVertex = vertex.size();
  155.     }
  156.  
  157.  
  158.    
  159.    
  160. }
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167. OUTPUT:
  168.  
  169. Edges sorted: (B, C), (E, G), (A, C), (C, D), (F, H), (C, E), (A, B), (B, E), (D, F), (A, D), (E, F), (C, F), (H, I), (G, H), (G, I), (B, G), (E, I), (D, H), (F, I),
  170. Number of vertices: 9
  171. (B, C)
  172. B C E G A D F H I
  173. (E, G)
  174. BC EG A D F H I
  175. (A, C)
  176. EG A DBC F H I
  177. EG A DBC F H I
  178. (F, H)
  179. EG A DBC FH I
  180. (C, E)
  181. A DBC FHEG I
  182. (A, B)
  183. ADBC FHEG I
  184. (B, E)
  185. ADBCFHEG I
  186. ADBCFHEG I
  187. ADBCFHEG I
  188. ADBCFHEG I
  189. ADBCFHEG I
  190. ADBCFHEG
  191. ADBCFHEG
  192. ADBCFHEG
  193. ADBCFHEG
  194. ADBCFHEG
  195. ADBCFHEG
  196. ADBCFHEG
  197. Tree: (B, C), (E, G), (A, C), (F, H), (C, E), (A, B), (B, E),
  198. Total Distance = 54.0m
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement