/**
  * Inicializa la matriz de adyacencia según los nodos adyacentes del grafo pasado como parámetro
  *
  * @param g
  */
 private void initAdy(Grafo g) {
   for (Eje e : g.dameEjes()) {
     int posV1 = pos(e.dameDesde().nodo, g.dameNodosV1());
     int posV2 = pos(e.dameHasta().nodo, g.dameNodosV2());
     ady[posV1][posV2] = true;
   }
 }
Esempio n. 2
0
  public int CalcularTiempoDeInfeccion(Grafo<String> grafo, Vertice<String> in) {
    int nuevaDist = 0;
    int maxDist = 0;
    int n = grafo.listaDeVertices().tamanio();
    int[] distancias = new int[n];
    ColaGenerica<Vertice<String>> q = new ColaGenerica<Vertice<String>>();
    for (int c = 0; c < n; c++) {
      distancias[c] = Integer.MAX_VALUE;
    }
    distancias[in.posicion()] = 0;
    q.encolar(in);
    while (!q.esVacia()) {
      Vertice<String> v = q.desencolar();
      nuevaDist = distancias[v.posicion()] + 1;
      ListaGenerica<Arista<String>> ady = grafo.listaDeAdyacentes(v);
      ady.comenzar();
      while (!ady.fin()) {
        Arista<String> a = ady.proximo();
        if (distancias[a.verticeDestino().posicion()] == Integer.MAX_VALUE) {
          q.encolar(a.verticeDestino());
          distancias[a.verticeDestino().posicion()] = nuevaDist;
          if (nuevaDist > maxDist) {
            maxDist = nuevaDist;
          }
        }
      }
    }

    return maxDist;
  }
  public MatrizAdyacencia(Grafo g) {
    int dimV1 = g.dameNodosV1().size();
    int dimV2 = g.dameNodosV2().size();
    ady = new boolean[dimV1][dimV2];
    resetAdy();
    initAdy(g);

    initEjes(g);
  }
Esempio n. 4
0
 public boolean induzido(Grafo grafo) {
   int cont;
   for (int i = 0; i < vColoridos.size(); i++) {
     int nome = ((Integer) vColoridos.get(i)).intValue();
     ArrayList adja = grafo.getAdjacencias(grafo.getVerticeByNome(nome));
     cont = 0;
     for (int j = 0; j < adja.size(); j++)
       if ((grafo.getAcendedor()).estaAceso((Vertice) adja.get(j))) cont++;
     if (cont != ((ArrayList) aColoridas.get(i)).size()) return false;
   }
   return true;
 }
Esempio n. 5
0
  private void crearGrafoDePartidosArreglados(int cantidad, int cantPartidosArreglados) {
    partidosArreglados = new Grafo();
    for (int i = 0; i < cantPartidosArreglados; i++) {
      partidosArreglados.agregar(s.nextInt(), s.nextInt());
    }

    // Agrego los nodos sin ejes.
    if (partidosArreglados.getListaAdyacencia().keySet().size() != jugadores) {
      for (int i = 1; i <= jugadores; i++) {
        if (!partidosArreglados.tieneNodo(i)) {
          partidosArreglados.agregar(i);
        }
      }
    }
  }
 public int[][] listaAristas(Grafo g) { // ineficiente para grafos dispersos
   int orden = g.orden();
   int[][] lista = new int[2][g.cantAristas()];
   int contador = 0;
   for (int i = 0; i < orden; i++) {
     for (int j = i + 1; j < orden; j++) {
       if (g.hayArista(i, j)) {
         lista[1][contador] = i;
         lista[2][contador] = j;
         contador++;
       }
     }
   }
   return lista;
 }
  public static void main(String args[]) {

    Grafo teste = new Grafo();

    teste.setVertices(lerGrafo(args[0]));
    Vertice i1 = new Vertice();
    Vertice i2 = new Vertice();
    i1 = teste.encontrarVertice(args[1]);
    i2 = teste.encontrarVertice(args[2]);

    List<Vertice> resultado = new ArrayList<Vertice>();
    Dijkstra algoritmo = new Dijkstra();
    resultado = algoritmo.encontrarMenorCaminhoDijkstra(teste, i1, i2);

    System.out.println("Esse é o menor caminho feito pelo algoritmo:" + resultado);
  }
Esempio n. 8
0
  /** Test of crearGrafo method, of class Grafo. */
  @Test
  public void testCrearGrafo() {
    System.out.println("crearGrafo");
    String[] archivos = {"funcion1.sql", "funcion2.sql", "archivoNoValido.txt"};
    String ubicacionArchivos = "/Users/juancarlos/tmp/";
    Grafo instance = new Grafo();
    List<Nodo> result = instance.crearGrafo(ubicacionArchivos, archivos, null);

    for (int y = 0; y < result.size(); y++) {
      System.out.println("archivo " + y + " " + result.get(y).getPrograma());
      for (int x = 0; x < result.get(y).getLlamadas().size(); x++) {
        System.out.println(
            "archivo"
                + result.get(y).getPrograma()
                + " llama a "
                + result.get(y).getLlamadas().get(x).getPrograma());
      }
    }
  }
Esempio n. 9
0
  /**
   * Constructor copia.
   *
   * @param original Grafo que va a ser copiado.
   */
  public Grafo(Grafo original) {
    this();

    this.nAristas = original.nAristas;
    this.nVertices = original.nVertices;

    int n = original.nVertices;
    // Copiamos matriz de adyacencias
    for (int i = 0; i < n; i++) {
      Vertice v = new Vertice<>(original.vertices.get(i));
      Integer grado = new Integer((int) original.grados.get(i));
      if (i == 0) {
        this.vertices.set(0, v);
        this.grados.set(0, grado);
      } else {
        this.vertices.add(v);
        this.grados.add(grado);
        this.matrizAdyacencias.add(new ArrayList<Arista<N>>());
      }

      for (int j = 0; j < n; j++) {
        Arista a = null;
        if (i != j && original.adyacentes(i, j)) {
          a = new Arista(original.arista(i, j));
        }
        if (i == 0 && j == 0) {
          this.matrizAdyacencias.get(0).set(0, a);
        } else {
          this.matrizAdyacencias.get(i).add(a);
        }
      }
    }
    // Copiamos listas de adyacencias
    for (int i = 0; i < this.nVertices; i++) {
      ArrayList<Vertice<T>> nuevaLista = new ArrayList<>();
      for (int j = 0; j < this.nVertices; j++) {
        if (i != j && this.adyacentes(i, j)) {
          nuevaLista.add(this.vertice(j));
        }
      }
      this.listasAdyacencias.put(i, nuevaLista);
    }
  }
 public int[][] listaAristas2(Grafo g) {
   int n = g.orden();
   int[][] a = new int[g.cantAristas()][2];
   int k = -1;
   List<Integer> list;
   for (int i = 0; i < n; i++) {
     list = g.getListaAdy(i);
     if (!list.isEmpty()) {
       for (Integer aList : list) {
         int w = aList;
         if (w > i) {
           k++;
           a[k][0] = i;
           a[k][1] = w;
         }
       }
     }
   }
   return a;
 }
Esempio n. 11
0
 @SuppressWarnings("SleepWhileHoldingLock")
 @Override
 public void run() {
   for (Arista actual : arbol.aristasB) {
     try {
       actual.marcar(lienzo.getGraphics());
       sleep(arbol.getVel());
     } catch (InterruptedException ex) {
       ex.printStackTrace();
     }
   }
   try {
     sleep(100);
   } catch (InterruptedException ex) {
   }
   arbol.aristasB.clear();
   dialog(c[0], c[1]);
 }
Esempio n. 12
0
  private void breadthFirstSearch(Grafo grafo, int verticeInicial) {
    //		long tempoInicial = System.currentTimeMillis();

    Queue<Integer> q = new LinkedList<Integer>();
    this.distancia[verticeInicial] = 0;
    this.visitado[verticeInicial] = true;
    q.add(verticeInicial);
    while (!q.isEmpty()) {
      int vertice = q.remove();
      for (int adj : grafo.getVerticesAdjacentes(vertice)) {
        if (!this.visitado[adj]) {
          this.arestas[adj] = vertice;
          this.distancia[adj] = this.distancia[vertice] + 1;
          this.visitado[adj] = true;
          q.add(adj);
        }
      }
    }
    // System.out.println("o bfs executou em " + (System.currentTimeMillis() - tempoInicial)+"ms");
  }
Esempio n. 13
0
  public String execAnalise(Grafo grafo) {
    vColoridos = new ArrayList(); // vertices coloridos
    aColoridas = new ArrayList(); // arestas coloridas
    for (int i = 0; i < grafo.getQtdVertices(); i++)
      if ((grafo.getAcendedor()).estaAceso(grafo.getVertice(i)))
        vColoridos.add(new Integer((grafo.getVertice(i)).getNome()));

    if (vColoridos.size() != 0) {
      for (int i = 0; i < vColoridos.size(); i++) {
        Vertice colorido = grafo.getVerticeByNome(((Integer) vColoridos.get(i)).intValue());
        ArrayList adjacencias = grafo.getAdjacencias(colorido);
        ArrayList a = new ArrayList();
        for (int j = 0; j < adjacencias.size(); j++) {
          Vertice V = (Vertice) adjacencias.get(j);
          if (pertenceColoridos(V.getNome()))
            if ((grafo.getAcendedor()).estaAceso(grafo.getArestaEntreVertices(colorido, V)))
              a.add(new Integer(V.getNome()));
        }
        aColoridas.add(a);
      }
      return subgrafo(grafo);
    } else return "Escolha um subgrafo!";
  }
  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();
  }
Esempio n. 15
0
  public Grafo resolverConGolosoRandom() {
    Grafo grafo = instancia.dameGrafoOriginal().clone();
    Grafo grafoTotal = instancia.dameGrafo().clone();

    LinkedList<Nodo> nodosIV1 = new LinkedList<Nodo>(instancia.dameNodosIV1());
    cantidadOperaciones = cantidadOperaciones + instancia.getCantidadDeOperaciones();
    LinkedList<Nodo> nodosIV2 = new LinkedList<Nodo>(instancia.dameNodosIV2());
    cantidadOperaciones = cantidadOperaciones + instancia.getCantidadDeOperaciones();
    cantidadOperaciones = cantidadOperaciones + nodosIV1.size() + nodosIV2.size();

    int sizeTotal = nodosIV1.size() + nodosIV2.size();
    cantidadOperaciones = cantidadOperaciones + 4;

    while (sizeTotal > 0) {
      LinkedList<Nodo> nodosActuales;
      boolean esIV1;

      int randomIVx = randomGenerator.nextInt(2);
      cantidadOperaciones = cantidadOperaciones + 1;

      cantidadOperaciones = cantidadOperaciones + 1;
      if (randomIVx == 0) {
        cantidadOperaciones = cantidadOperaciones + nodosIV1.size() + 1;
        if (nodosIV1.size() != 0) {
          nodosActuales = nodosIV1;
          esIV1 = true;
          cantidadOperaciones = cantidadOperaciones + 2;
        } else {
          nodosActuales = nodosIV2;
          esIV1 = false;
          cantidadOperaciones = cantidadOperaciones + 2;
        }
      } else {
        cantidadOperaciones = cantidadOperaciones + nodosIV2.size() + 1;
        if (nodosIV2.size() != 0) {
          nodosActuales = nodosIV2;
          esIV1 = false;
          cantidadOperaciones = cantidadOperaciones + 2;
        } else {
          nodosActuales = nodosIV1;
          esIV1 = true;
          cantidadOperaciones = cantidadOperaciones + 2;
        }
      }

      Nodo nodoRandom;

      if (esIV1) {
        nodoRandom = grafoTotal.dameNodoConMayorGradoDeV1RestringidoA(nodosActuales);
        cantidadOperaciones = cantidadOperaciones + grafoTotal.getCantidadDeOperaciones();
      } else {
        nodoRandom = grafoTotal.dameNodoConMayorGradoDeV2RestringidoA(nodosActuales);
        cantidadOperaciones = cantidadOperaciones + grafoTotal.getCantidadDeOperaciones();
      }
      cantidadOperaciones = cantidadOperaciones + 2;

      LinkedList<Eje> adyacentesHastaAhora =
          instancia.dameEjesConAdyacentes(grafo, nodoRandom, esIV1);
      cantidadOperaciones = cantidadOperaciones + grafo.getCantidadDeOperaciones();
      cantidadOperaciones = cantidadOperaciones + instancia.getCantidadDeOperaciones();

      int minCruces = Integer.MAX_VALUE;
      int posMinCruce = -1;
      cantidadOperaciones = cantidadOperaciones + 3;

      for (int j = 0; j < (esIV1 ? grafo.dameNodosV1().size() : grafo.dameNodosV2().size()); j++) {
        cantidadOperaciones = cantidadOperaciones + grafo.getCantidadDeOperaciones();
        int cruces = grafo.cantidadCruces(nodoRandom, adyacentesHastaAhora, j, esIV1);
        cantidadOperaciones = cantidadOperaciones + grafo.getCantidadDeOperaciones();
        cantidadOperaciones = cantidadOperaciones + 2;
        if (minCruces > cruces) {
          minCruces = cruces;
          posMinCruce = j;
          cantidadOperaciones = cantidadOperaciones + 2;
        }
      }

      if (esIV1) {
        grafo.agregarNodoYEjesEnV1(nodoRandom, adyacentesHastaAhora, posMinCruce);
        cantidadOperaciones = cantidadOperaciones + grafo.getCantidadDeOperaciones();
      } else {
        grafo.agregarNodoYEjesEnV2(nodoRandom, adyacentesHastaAhora, posMinCruce);
        cantidadOperaciones = cantidadOperaciones + grafo.getCantidadDeOperaciones();
      }

      nodosActuales.remove(nodoRandom);
      cantidadOperaciones = cantidadOperaciones + nodosActuales.size();

      sizeTotal--;
    }
    return grafo;
  }
Esempio n. 16
0
  ///////////////////////////////////////////////////////// Crear grafo a partir de un archivo
  // ///////////////////////////////////////////////
  public Grafo Grafo(String n) {

    Grafo g = null;

    File file = new File(n);

    try {

      String line;

      FileReader filer = new FileReader(file);
      BufferedReader buf = new BufferedReader(filer);
      String linea = buf.readLine().trim();

      boolean seguir = true;

      if (linea != null) {

        if (!linea.equals("d") && !linea.equals("n")) {
          System.out.println("El archivo está mal escrito");

        } else {
          StringTokenizer token = new StringTokenizer(linea);
          String Dir = token.nextToken();

          linea = buf.readLine().trim();
          token = new StringTokenizer(linea);
          int nV = Integer.parseInt(token.nextToken());
          token = new StringTokenizer(linea);
          linea = buf.readLine().trim();
          token = new StringTokenizer(linea);
          int nL = Integer.parseInt(token.nextToken());
          boolean dirigido = false;

          if (Dir.equals("d")) {
            System.out.println("Dirigido");
            g = new GrafoDirigido();
            dirigido = true;
          } else if (Dir.equals("n")) {
            System.out.println("NoDirigido");
            g = new GrafoNoDirigido();
            dirigido = false;
          }

          int i = 0;
          while (i < nV && (linea = buf.readLine().trim()) != null) {

            token = new StringTokenizer(linea);
            String idVer = token.nextToken();
            double peso = Double.parseDouble(token.nextToken());
            Vertice ver = new Vertice(peso, idVer);
            g.agregarVertice(g, ver);
            i++;
          }

          i = 0;
          while (i < nL && (linea = buf.readLine().trim()) != null) {

            token = new StringTokenizer(linea);
            String idL = token.nextToken();
            String idv1 = token.nextToken();
            String idv2 = token.nextToken();
            double peso2 = Double.parseDouble(token.nextToken());

            if (dirigido == true) {
              Arco ac = new Arco(peso2, idL, idv1, idv2);
              ((GrafoDirigido) g).agregarArco(((GrafoDirigido) g), ac);
            } else {
              Arista at = new Arista(peso2, idL, idv1, idv2);
              ((GrafoNoDirigido) g).agregarArista(((GrafoNoDirigido) g), at);
            }
            ;
            i++;
          }
          ;
          System.out.println("El grafo se creo exitosamente!!");
          g.vertices(g);
          g.lados(g);
        }
      }
      buf.close();

    } catch (FileNotFoundException e) {
      System.out.println("El archivo no existe");
      g = new GrafoDirigido();
    } catch (IOException e) {
      System.out.println("Excepcion, intente de nuevo");
    }

    return g;
  }
Esempio n. 17
0
 /** @param g */
 private void initEjes(Grafo g) {
   ejes = g.dameEjes();
   nodos = g.dameNodosV1();
 }
Esempio n. 18
0
 public Bfs(Grafo grafo, int verticeInicial) {
   this.visitado = new boolean[grafo.getNumeroVertices()];
   this.distancia = new double[grafo.getNumeroVertices()];
   this.arestas = new int[grafo.getNumeroVertices()];
   breadthFirstSearch(grafo, verticeInicial);
 }