/** Insertar un nodo en el grafoNoDirigido. */ @FXML protected void botonInsertar() { if (scene == null) { initializeGrafo(); } // Mostrar el codigo String tipo = getTipoString(); String codigoTexto = new Scanner( getClass() .getResourceAsStream( "/cl/cromer/estructuras/code/grafo" + tipo + "/insertarNodo")) .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] = new GrafoNodo(Integer.valueOf(valorGrafo.getText())); break; } else if (grafoNodos[i].getValue() == Integer.valueOf(valorGrafo.getText())) { Main.mostrarError(resourceBundle.getString("grafoNodoExiste"), resourceBundle); i = -1; break; } } if (i == 5) { // Maximo 5 nodos Main.mostrarError(resourceBundle.getString("grafoLleno"), resourceBundle); } else if (i != -1) { boolean exito; if (grafoTipos.getTipo() == Grafo.Tipos.NO_DIRIGIDO) { exito = noDirigido.addNode(grafoNodos[i]); } else { Grafo.Vertex<GrafoNodo> vertex = new Grafo.Vertex<>(String.valueOf(grafoNodos[i].getValue())); vertex.setData(grafoNodos[i]); exito = dirigido.addVertex(vertex); } if (exito) { valorGrafo.setText(""); generarGrafico(); } else { Main.mostrarError(resourceBundle.getString("grafoNodoExiste"), resourceBundle); } } } catch (NumberFormatException exception) { // El error no es fatal, sigue Main.mostrarError(resourceBundle.getString("grafoNoNumero"), resourceBundle); } } else { Main.mostrarError(resourceBundle.getString("grafoNoNumero"), resourceBundle); } }
/** 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(); }