/** 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); } }
/** 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(); }