コード例 #1
0
  /** Eliminar un nodo del grafoNoDirigido. */
  @FXML
  protected void botonEliminar() {
    if (scene == null) {
      initializeGrafo();
    }

    // Mostrar el codigo
    String tipo = getTipoString();
    String codigoTexto =
        new Scanner(
                getClass()
                    .getResourceAsStream(
                        "/cl/cromer/estructuras/code/grafo" + tipo + "/eliminarNodo"))
            .useDelimiter("\\Z")
            .next();
    codigoGrafo.setText(codigoTexto);

    if (valorGrafo.getText() != null && !valorGrafo.getText().trim().equals("")) {
      try {
        int i;
        for (i = 0; i < 5; i++) {
          if (grafoNodos[i] != null
              && grafoNodos[i].getValue() == Integer.valueOf(valorGrafo.getText())) {
            break;
          }
        }

        if (i != 5) {
          boolean exito = false;
          if (grafoTipos.getTipo() == Grafo.Tipos.NO_DIRIGIDO) {
            exito = noDirigido.removeNode(grafoNodos[i]);
          } else {
            for (int j = 0; j < dirigido.size(); j++) {
              Grafo.Vertex<GrafoNodo> vertex = dirigido.getVertex(j);
              if (vertex.getData().getValue() == Integer.valueOf(valorGrafo.getText())) {
                exito = dirigido.removeVertex(vertex);
                break;
              }
            }
          }
          if (exito) {
            grafoNodos[i] = null;
            valorGrafo.setText("");
            generarGrafico();
          } else {
            Main.mostrarError(resourceBundle.getString("grafoNoNodo"), resourceBundle);
          }
        } else {
          Main.mostrarError(resourceBundle.getString("grafoNoNodo"), resourceBundle);
        }
      } catch (NumberFormatException exception) {
        // El error no es fatal, sigue
        Main.mostrarError(resourceBundle.getString("grafoNoNumero"), resourceBundle);
      }
    } else {
      Main.mostrarError(resourceBundle.getString("grafoNoNumero"), resourceBundle);
    }
  }
コード例 #2
0
  /** LLenar el grafoNoDirigido con nodos y edges al azar. */
  @FXML
  protected void botonLlenar() {
    if (scene == null) {
      initializeGrafo();
    }

    Random random = new Random();
    int maximo = 99;
    int minimo = 0;
    int rango = maximo - minimo + 1;

    Array array = new Array(5);
    for (int i = 0; i < 5; i++) {
      if (grafoNodos[i] != null) {
        array.insertar(grafoNodos[i].getValue());
      }
    }

    if (grafoTipos.getTipo() == Grafo.Tipos.NO_DIRIGIDO) {
      for (int i = 0; i < 5; i++) {
        if (grafoNodos[i] == null) {

          int numero = random.nextInt(rango) + minimo;
          // Check if value is in array
          while (array.buscar(numero) != -1) {
            numero = random.nextInt(rango) + minimo;
          }

          grafoNodos[i] = new GrafoNodo(numero);

          noDirigido.addNode(grafoNodos[i]);
        }
      }
      noDirigido.addEdge(grafoNodos[0], grafoNodos[1]);
      noDirigido.addEdge(grafoNodos[1], grafoNodos[2]);
      noDirigido.addEdge(grafoNodos[2], grafoNodos[4]);
      noDirigido.addEdge(grafoNodos[4], grafoNodos[3]);
      noDirigido.addEdge(grafoNodos[3], grafoNodos[1]);
    } else {
      int j = (grafoTipos.getTipo() == Grafo.Tipos.DIRIGIDO) ? 5 : 4;
      for (int i = 0; i < j; i++) {
        if (grafoNodos[i] == null) {

          int numero = random.nextInt(rango) + minimo;
          // Check if value is in array
          while (array.buscar(numero) != -1) {
            numero = random.nextInt(rango) + minimo;
          }

          grafoNodos[i] = new GrafoNodo(numero);

          Grafo.Vertex<GrafoNodo> vertex =
              new Grafo.Vertex<>(String.valueOf(grafoNodos[i].getValue()));
          vertex.setData(grafoNodos[i]);
          dirigido.addVertex(vertex);
        }
      }
      if (grafoTipos.getTipo() == Grafo.Tipos.DIRIGIDO) {
        dirigido.addEdge(dirigido.getVertex(0), dirigido.getVertex(1), PESO_PREDETERMINADO);
        dirigido.addEdge(dirigido.getVertex(1), dirigido.getVertex(2), PESO_PREDETERMINADO);
        dirigido.addEdge(dirigido.getVertex(2), dirigido.getVertex(4), PESO_PREDETERMINADO);
        dirigido.addEdge(dirigido.getVertex(2), dirigido.getVertex(0), PESO_PREDETERMINADO);
        dirigido.addEdge(dirigido.getVertex(4), dirigido.getVertex(3), PESO_PREDETERMINADO);
        dirigido.addEdge(dirigido.getVertex(3), dirigido.getVertex(1), PESO_PREDETERMINADO);
      } else {
        dirigido.addEdge(dirigido.getVertex(0), dirigido.getVertex(3), PESO_PREDETERMINADO);
        dirigido.addEdge(dirigido.getVertex(1), dirigido.getVertex(2), PESO_PREDETERMINADO);
        dirigido.addEdge(dirigido.getVertex(2), dirigido.getVertex(0), PESO_PREDETERMINADO);
        dirigido.addEdge(dirigido.getVertex(1), dirigido.getVertex(0), PESO_PREDETERMINADO);
        dirigido.addEdge(dirigido.getVertex(2), dirigido.getVertex(3), PESO_PREDETERMINADO);
        dirigido.addEdge(dirigido.getVertex(3), dirigido.getVertex(1), PESO_PREDETERMINADO);
      }
    }

    generarGrafico();
  }