public List<Aresta> preparaArestas() { List<Aresta> ar = new ArrayList<Aresta>(); for (int i = 0; i < Edges.size(); i++) { Aresta current = Edges.get(i); if (!(current.getFrom() == 0 || current.getTo() == 0)) { ar.add(new Aresta(current.getFrom(), current.getTo(), current.getDistance())); } } return ar; }
/** * Finds the minimum spanning tree of the given grapg with n vertices (the vertices are numbered * 0, 1, ..., n-1) * * @param edges edges of the undirected graph * @param nodeCount number of vertices (n) * @return minimum spanning tree */ public List<Aresta> kruskalAlgorithm(List<Aresta> edges, int nodeCount) { DisjointSet ds = new DisjointSet(nodeCount); List<Aresta> spanningTree = new ArrayList<Aresta>(); Collections.sort(edges); // já vem ordenado int i = 0; while (i != edges.size() && spanningTree.size() != nodeCount - 1) { Aresta e = edges.get(i); if (ds.find(e.getFrom()) != ds.find(e.getTo())) { spanningTree.add(e); ds.union(e.getFrom(), e.getTo()); } i++; } return spanningTree; }
public List<Aresta> recolocaArestas(List<Aresta> ar, double[] u) { int tot = 0; for (int i = 0; i < Edges.size(); i++) { if (tot == 2) { break; } if (Edges.get(i).getFrom() == 0 || Edges.get(i).getTo() == 0) { Aresta current = Edges.get(i); ar.add( new Aresta( current.getFrom(), current.getTo(), current.getDistance())); // retorna as duas menores arestas do vertice inicial ar.get(0) .setDistance(ar.get(0).getDistance() + u[ar.get(0).getFrom()] + u[ar.get(0).getTo()]); tot++; } } return ar; }