Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- package lapr.project.utils;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.Comparator;
- import java.util.List;
- import lapr.project.model.Stand;
- /**
- *
- * @author UndefinedGadget
- */
- public class Kruskal {
- public Kruskal() {
- }
- private Graph graph;
- private int numberVertex;
- private List<Edge>edgesSorted = new ArrayList<>();
- private List<String> vertex = new ArrayList<>();
- public void initialize() {
- graph = new Graph();
- Stand A = new Stand(10, "A");
- Stand B = new Stand(20, "B");
- Stand C = new Stand(30, "C");
- Stand D = new Stand(40, "D");
- Stand E = new Stand(50, "E");
- Stand F = new Stand(60, "F");
- Stand G = new Stand(70, "G");
- Stand H = new Stand(80, "H");
- Stand I = new Stand(90, "I");
- graph.addEdge(new Edge(B, C, 5));
- graph.addEdge(new Edge(E, G, 6));
- graph.addEdge(new Edge(A, C, 7));
- graph.addEdge(new Edge(C, D, 7));
- graph.addEdge(new Edge(F, H, 8));
- graph.addEdge(new Edge(C, E, 9));
- graph.addEdge(new Edge(A, B, 9));
- graph.addEdge(new Edge(B, E, 10));
- graph.addEdge(new Edge(D, F, 10));
- graph.addEdge(new Edge(A, D, 12));
- graph.addEdge(new Edge(E, F, 12));
- graph.addEdge(new Edge(C, F, 13));
- graph.addEdge(new Edge(H, I, 15));
- graph.addEdge(new Edge(G, H, 16));
- graph.addEdge(new Edge(G, I, 17));
- graph.addEdge(new Edge(B, G, 18));
- graph.addEdge(new Edge(E, I, 18));
- graph.addEdge(new Edge(D, H, 20));
- graph.addEdge(new Edge(F, I, 20));
- // graph.addEdge(new Edge(A, B, 10));
- // graph.addEdge(new Edge(A, C, 12));
- // graph.addEdge(new Edge(A, E, 15));
- // graph.addEdge(new Edge(B, D, 1));
- // graph.addEdge(new Edge(B, E, 5));
- // graph.addEdge(new Edge(C, E, 2));
- // graph.addEdge(new Edge(C, F, 3));
- // graph.addEdge(new Edge(D, E, 3));
- // graph.addEdge(new Edge(D, G, 8));
- // graph.addEdge(new Edge(E, G, 11));
- // graph.addEdge(new Edge(E, H, 6));
- // graph.addEdge(new Edge(E, F, 5));
- // graph.addEdge(new Edge(F, H, 4));
- // graph.addEdge(new Edge(G, H, 10));
- // graph.addEdge(new Edge(H, I, 9));
- // graph.addEdge(new Edge(G, I, 7));
- String sort = "";
- edgesSorted = graph.getEdges();
- Collections.sort(edgesSorted, edgesCriteria);
- for (Edge e : edgesSorted) {
- sort = sort + "(" + e.getInitialVertex().getDescription() + ", " + e.getEndVertex().getDescription() + "), ";
- }
- System.out.println("Edges sorted: " + sort);
- countVertex();
- System.out.println("Number of vertices: " + numberVertex);
- calculateMinimumCable();
- }
- Comparator<Edge> edgesCriteria =(Edge o1, Edge o2) -> {
- if (o1.getDistance() > o2.getDistance()) {
- return 1;
- } else {
- if (o1.getDistance() < o2.getDistance()) {
- return -1;
- } else {
- return 0;
- }
- }
- };
- public void calculateMinimumCable() {
- String ttt = "";
- double totalDistance = 0;
- String tree = "";
- List<String> vertexCopy = new ArrayList<>(vertex);
- for (int a = 0; a < edgesSorted.size(); a++) {
- String start = edgesSorted.get(a).getInitialVertex().getDescription();
- String end = edgesSorted.get(a).getEndVertex().getDescription();
- for (int i = 0; i < vertex.size(); i++) {
- if (vertex.get(i).contains(start)&& !vertex.get(i).contains(end) ) {
- String aux = "";
- for (int j = 0; j < vertex.size() - 1; j++) {
- if (vertex.get(j).contains(end)) {
- aux = vertex.get(j);
- vertexCopy.remove(aux);
- System.out.println("(" + edgesSorted.get(a).getInitialVertex().getDescription() + ", " + edgesSorted.get(a).getEndVertex().getDescription() + ")");
- tree = tree + "(" + edgesSorted.get(a).getInitialVertex().getDescription() + ", " + edgesSorted.get(a).getEndVertex().getDescription() + "), ";
- totalDistance = totalDistance + edgesSorted.get(a).getDistance();
- }
- }
- try {
- String temp = vertex.get(i) + aux;
- vertexCopy.set(i,temp);
- vertexCopy.remove(end);
- } catch (IndexOutOfBoundsException e) {
- System.out.println("Tree: " + tree);
- System.out.println("Total Distance = " + totalDistance + "m");
- }
- }
- }
- for (String v : vertex) {
- ttt = ttt + v + " ";
- }
- System.out.println(ttt);
- ttt = "";
- vertex = vertexCopy;
- }
- System.out.println("Tree: " + tree);
- System.out.println("Total Distance = " + totalDistance + "m");
- }
- public void countVertex() {
- edgesSorted.stream().map((e) -> {
- if (!vertex.contains(e.getInitialVertex().getDescription())) {
- vertex.add(e.getInitialVertex().getDescription());
- }
- return e;
- }).filter((e) -> (!vertex.contains(e.getEndVertex().getDescription()))).forEachOrdered((e) -> {
- vertex.add(e.getEndVertex().getDescription());
- });
- numberVertex = vertex.size();
- }
- }
- OUTPUT:
- 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),
- Number of vertices: 9
- (B, C)
- B C E G A D F H I
- (E, G)
- BC EG A D F H I
- (A, C)
- EG A DBC F H I
- EG A DBC F H I
- (F, H)
- EG A DBC FH I
- (C, E)
- A DBC FHEG I
- (A, B)
- ADBC FHEG I
- (B, E)
- ADBCFHEG I
- ADBCFHEG I
- ADBCFHEG I
- ADBCFHEG I
- ADBCFHEG I
- ADBCFHEG
- ADBCFHEG
- ADBCFHEG
- ADBCFHEG
- ADBCFHEG
- ADBCFHEG
- ADBCFHEG
- Tree: (B, C), (E, G), (A, C), (F, H), (C, E), (A, B), (B, E),
- Total Distance = 54.0m
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement