Ejemplo n.º 1
0
 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;
 }
Ejemplo n.º 2
0
 /**
  * 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;
 }
Ejemplo n.º 3
0
 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;
 }
Ejemplo n.º 4
0
  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;
  }
Ejemplo n.º 5
0
    @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();
  }