private boolean existeArestaIgual(String nomeNodo1, String nomeNodo2, String valor) { for (int i = 0; i < this.arestas.size(); i++) { Aresta temp = this.arestas.get(i); if (temp.getN1().getNome().equals(nomeNodo1) && temp.getN2().getNome().equals(nomeNodo2) && temp.getValor().equals(valor)) { return true; } } return false; }
/** * 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; }
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; }
@Override public int compareTo(Aresta compareAresta) { double compareDistance = compareAresta.getDistance(); double v1, v2; v1 = this.distance; v2 = compareDistance; // ascending order if (v1 > v2) { return 1; } if (v2 > v1) { return -1; } if (v1 == v2) { return 0; } return 0; }
public static List<Vertice> lerGrafo(String nomeArquivo) { Grafo g = new Grafo(); Vertice v; File f = new File(nomeArquivo); String vertices[]; String linha; ArrayList<String[]> s1 = new ArrayList<String[]>(); try { BufferedReader br = new BufferedReader(new FileReader(f)); Map<String, Vertice> mapa = new HashMap<String, Vertice>(); while ((linha = br.readLine()) != null) { if (linha.contains(",")) { s1.add(linha.split("/")); vertices = s1.get(0)[0].split(","); v = (Vertice) mapa.get(vertices[0]); if (v == null) v = new Vertice(); List<Vertice> vizinhosAtual = new ArrayList<Vertice>(); List<Aresta> arestasAtual = new ArrayList<Aresta>(); v.setDescricao(vertices[0]); mapa.put(vertices[0], v); if (linha.contains("/")) { String pesoArestas[] = s1.get(0)[1].split(","); for (int i = 1; i < vertices.length; i++) { Vertice vit; // vit = g.encontrarVertice(vertices[i]); vit = mapa.get(vertices[i]); if (vit == null) vit = new Vertice(); vit.setDescricao(vertices[i]); vizinhosAtual.add(vit); mapa.put(vertices[i], vit); Aresta ait = new Aresta(v, vit); ait.setPeso(Integer.parseInt(pesoArestas[i - 1])); arestasAtual.add(ait); } v.setVizinhos(vizinhosAtual); v.setArestas(arestasAtual); } } // Vertices finais else { // v = g.encontrarVertice(linha); v = (Vertice) mapa.get(linha); if (v == null) v = new Vertice(); v.setDescricao(linha); mapa.put(linha, v); } g.adicionarVertice(v); s1.clear(); } // catch do BufferedReader } catch (FileNotFoundException e) { System.out.println("Nao encontrou o arquivo"); e.printStackTrace(); } // catch do readLine catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // Retornando os vertices return g.getVertices(); }