Graph updates for code display.
This commit is contained in:
@@ -9,18 +9,18 @@ import java.util.*;
|
||||
*/
|
||||
public class Grafo {
|
||||
/**
|
||||
* Esta clase contiene los arbolTipo de grafo.
|
||||
* Esta clase contiene los arbolTipo de grafoNoDirigido.
|
||||
*
|
||||
* @author Chris Cromer
|
||||
*/
|
||||
final static public class Tipos {
|
||||
/**
|
||||
* Tipo de grafo dirigido.
|
||||
* Tipo de grafoNoDirigido dirigido.
|
||||
*/
|
||||
static final public int DIRIGIDO = 0;
|
||||
|
||||
/**
|
||||
* Tipo de grafo no dirigido.
|
||||
* Tipo de grafoNoDirigido no dirigido.
|
||||
*/
|
||||
static final public int NO_DIRIGIDO = 1;
|
||||
|
||||
@@ -32,7 +32,7 @@ public class Grafo {
|
||||
/**
|
||||
* Inicilizar el tipo.
|
||||
*
|
||||
* @param tipo int: Tipo de grafo, {@value #DIRIGIDO} o {@value #NO_DIRIGIDO}
|
||||
* @param tipo int: Tipo de grafoNoDirigido, {@value #DIRIGIDO} o {@value #NO_DIRIGIDO}
|
||||
*/
|
||||
public Tipos(int tipo) {
|
||||
switch (tipo) {
|
||||
@@ -50,7 +50,7 @@ public class Grafo {
|
||||
/**
|
||||
* Devolver el tipo.
|
||||
*
|
||||
* @return int: El tipo de grafo.
|
||||
* @return int: El tipo de grafoNoDirigido.
|
||||
*/
|
||||
public int getTipo() {
|
||||
return tipo;
|
||||
|
@@ -13,6 +13,7 @@ import java.net.URL;
|
||||
import java.util.List;
|
||||
import java.util.Random;
|
||||
import java.util.ResourceBundle;
|
||||
import java.util.Scanner;
|
||||
|
||||
/**
|
||||
* Esta clase es para controlar todos la interfaz de Arbol.
|
||||
@@ -61,17 +62,17 @@ public class GrafoController implements Initializable {
|
||||
private ResourceBundle resourceBundle;
|
||||
|
||||
/**
|
||||
* Tipo de grafo.
|
||||
* Tipo de grafoNoDirigido.
|
||||
*/
|
||||
private Grafo.Tipos grafoTipos;
|
||||
|
||||
/**
|
||||
* El grafo dirigido usado en la aplicación.
|
||||
* El grafoNoDirigido dirigido usado en la aplicación.
|
||||
*/
|
||||
private Grafo.Dirigido<GrafoNodo> dirigido;
|
||||
|
||||
/**
|
||||
* El grafo no dirigido usado en la aplicación.
|
||||
* El grafoNoDirigido no dirigido usado en la aplicación.
|
||||
*/
|
||||
private Grafo.NoDirigido<GrafoNodo> noDirigido;
|
||||
|
||||
@@ -105,7 +106,7 @@ public class GrafoController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* LLenar el grafo con nodos y edges al azar.
|
||||
* LLenar el grafoNoDirigido con nodos y edges al azar.
|
||||
*/
|
||||
@FXML
|
||||
protected void botonLlenar() {
|
||||
@@ -175,7 +176,7 @@ public class GrafoController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Eliminar el grafo.
|
||||
* Eliminar el grafoNoDirigido.
|
||||
*/
|
||||
@FXML
|
||||
protected void botonVaciar() {
|
||||
@@ -194,7 +195,7 @@ public class GrafoController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Insertar un nodo en el grafo.
|
||||
* Insertar un nodo en el grafoNoDirigido.
|
||||
*/
|
||||
@FXML
|
||||
protected void botonInsertar() {
|
||||
@@ -203,8 +204,9 @@ public class GrafoController implements Initializable {
|
||||
}
|
||||
|
||||
// Mostrar el codigo
|
||||
/*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
|
||||
codigoArray.setText(codigoTexto);*/
|
||||
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 {
|
||||
@@ -255,7 +257,7 @@ public class GrafoController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Eliminar un nodo del grafo.
|
||||
* Eliminar un nodo del grafoNoDirigido.
|
||||
*/
|
||||
@FXML
|
||||
protected void botonEliminar() {
|
||||
@@ -264,8 +266,9 @@ public class GrafoController implements Initializable {
|
||||
}
|
||||
|
||||
// Mostrar el codigo
|
||||
/*String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/array" + tipo + "/insertar")).useDelimiter("\\Z").next();
|
||||
codigoArray.setText(codigoTexto);*/
|
||||
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 {
|
||||
@@ -314,7 +317,7 @@ public class GrafoController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Insertar un edge al grafo y mostrar el codigo en la pantalla.
|
||||
* Insertar un edge al grafoNoDirigido y mostrar el codigo en la pantalla.
|
||||
*/
|
||||
@FXML
|
||||
protected void botonInsertarEdge() {
|
||||
@@ -322,6 +325,10 @@ public class GrafoController implements Initializable {
|
||||
initializeGrafo();
|
||||
}
|
||||
|
||||
String tipo = getTipoString();
|
||||
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/grafo" + tipo + "/insertarEdge")).useDelimiter("\\Z").next();
|
||||
codigoGrafo.setText(codigoTexto);
|
||||
|
||||
if (valorNodo1.getText() != null && !valorNodo1.getText().trim().equals("") && valorNodo2.getText() != null && !valorNodo2.getText().trim().equals("")) {
|
||||
GrafoNodo[] nodos = getNodosEdge();
|
||||
|
||||
@@ -348,6 +355,8 @@ public class GrafoController implements Initializable {
|
||||
dirigido.addEdge(dirigido.findVertexByName(String.valueOf(nodos[0].getValue())), dirigido.findVertexByName(String.valueOf(nodos[1].getValue())), WEIGHT);
|
||||
}
|
||||
}
|
||||
valorNodo1.setText("");
|
||||
valorNodo2.setText("");
|
||||
}
|
||||
else {
|
||||
Main.mostrarError(resourceBundle.getString("grafoNoNumero"), resourceBundle);
|
||||
@@ -357,7 +366,7 @@ public class GrafoController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Eliminar un edge del grafo y mostrar el codigo en la pantalla.
|
||||
* Eliminar un edge del grafoNoDirigido y mostrar el codigo en la pantalla.
|
||||
*/
|
||||
@FXML
|
||||
protected void botonEliminarEdge() {
|
||||
@@ -365,6 +374,10 @@ public class GrafoController implements Initializable {
|
||||
initializeGrafo();
|
||||
}
|
||||
|
||||
String tipo = getTipoString();
|
||||
String codigoTexto = new Scanner(getClass().getResourceAsStream("/cl/cromer/estructuras/code/grafo" + tipo + "/eliminarEdge")).useDelimiter("\\Z").next();
|
||||
codigoGrafo.setText(codigoTexto);
|
||||
|
||||
if (valorNodo1.getText() != null && ! valorNodo1.getText().trim().equals("") && valorNodo2.getText() != null && ! valorNodo2.getText().trim().equals("")) {
|
||||
GrafoNodo[] nodos = getNodosEdge();
|
||||
|
||||
@@ -390,6 +403,8 @@ public class GrafoController implements Initializable {
|
||||
dirigido.removeEdge(dirigido.findVertexByName(String.valueOf(nodos[0].getValue())), dirigido.findVertexByName(String.valueOf(nodos[1].getValue())));
|
||||
}
|
||||
}
|
||||
valorNodo1.setText("");
|
||||
valorNodo2.setText("");
|
||||
}
|
||||
else {
|
||||
Main.mostrarError(resourceBundle.getString("grafoNoEdge"), resourceBundle);
|
||||
@@ -399,7 +414,7 @@ public class GrafoController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Crear un grafo nuevo.
|
||||
* Crear un grafoNoDirigido nuevo.
|
||||
*/
|
||||
private void initializeGrafo() {
|
||||
scene = contenidoGrafo.getScene();
|
||||
@@ -439,7 +454,7 @@ public class GrafoController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Buscar un grafo dirigido para ver si existe en edge entre los nodos.
|
||||
* Buscar un grafoNoDirigido dirigido para ver si existe en edge entre los nodos.
|
||||
*
|
||||
* @param nodo1 GrafoNodo: El primer nodo a buscar.
|
||||
* @param nodo2 GrafoNodo: El otro nodo a buscar.
|
||||
@@ -459,7 +474,24 @@ public class GrafoController implements Initializable {
|
||||
}
|
||||
|
||||
/**
|
||||
* Generar la canvas con el grafo.
|
||||
* Devolver el tipo de grafo en un string.
|
||||
*
|
||||
* @return String: El tipo de grafo.
|
||||
*/
|
||||
private String getTipoString() {
|
||||
String tipo;
|
||||
switch (grafoTipos.getTipo()) {
|
||||
case Grafo.Tipos.NO_DIRIGIDO:
|
||||
tipo = "NoDirigido";
|
||||
break;
|
||||
default:
|
||||
tipo = "Dirigido";
|
||||
}
|
||||
return tipo;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generar la canvas con el grafoNoDirigido.
|
||||
*/
|
||||
private void generarGrafico() {
|
||||
grafico.removerDestacar();
|
||||
|
@@ -1,19 +1,39 @@
|
||||
package cl.cromer.estructuras;
|
||||
|
||||
/**
|
||||
* Created by cromer on 7/7/16.
|
||||
* Este clase es la estructura de un nodo de grafoNoDirigido.
|
||||
*
|
||||
* @author Chris Cromer
|
||||
*/
|
||||
class GrafoNodo {
|
||||
/**
|
||||
* El valor del nodo.
|
||||
*/
|
||||
private int value;
|
||||
|
||||
/**
|
||||
* Inicializar un nodo.
|
||||
*
|
||||
* @param value int: El valor del nodo.
|
||||
*/
|
||||
public GrafoNodo(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Devolver el valor del nodo.
|
||||
*
|
||||
* @return int: El valor del nodo.
|
||||
*/
|
||||
public int getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cambiar el valor del nodo.
|
||||
*
|
||||
* @param value int: El valor nuevo.
|
||||
*/
|
||||
public void setValue(int value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
27
src/cl/cromer/estructuras/code/grafoDirigido/eliminarEdge
Normal file
27
src/cl/cromer/estructuras/code/grafoDirigido/eliminarEdge
Normal file
@@ -0,0 +1,27 @@
|
||||
private final Map<T, Set<T>> grafo = new HashMap<>();
|
||||
|
||||
public void eliminarEdge(T nodo1, T nodo2) {
|
||||
if (!grafo.containsKey(nodo1)) {
|
||||
// El edge no existe.
|
||||
return;
|
||||
}
|
||||
|
||||
// Eliminar el edge.
|
||||
grafo.get(nodo1).remove(nodo2);
|
||||
}
|
||||
|
||||
class GrafoNodo {
|
||||
private int valor;
|
||||
|
||||
public GrafoNodo(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
|
||||
public int getValor() {
|
||||
return valor;
|
||||
}
|
||||
|
||||
public void setValue(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
}
|
27
src/cl/cromer/estructuras/code/grafoDirigido/eliminarNodo
Normal file
27
src/cl/cromer/estructuras/code/grafoDirigido/eliminarNodo
Normal file
@@ -0,0 +1,27 @@
|
||||
private final Map<T, Set<T>> grafo = new HashMap<>();
|
||||
|
||||
public void eliminarNodo(T nodo) {
|
||||
if (!grafo.containsKey(nodo)) {
|
||||
// No existe el nodo.
|
||||
return;
|
||||
}
|
||||
|
||||
// Remover el nodo.
|
||||
grafo.remove(nodo);
|
||||
}
|
||||
|
||||
class GrafoNodo {
|
||||
private int valor;
|
||||
|
||||
public GrafoNodo(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
|
||||
public int getValor() {
|
||||
return valor;
|
||||
}
|
||||
|
||||
public void setValue(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
}
|
27
src/cl/cromer/estructuras/code/grafoDirigido/insertarEdge
Normal file
27
src/cl/cromer/estructuras/code/grafoDirigido/insertarEdge
Normal file
@@ -0,0 +1,27 @@
|
||||
private final Map<T, Set<T>> grafo = new HashMap<>();
|
||||
|
||||
public void insertarEdge(T nodo1, T nodo2) {
|
||||
if (!grafo.containsKey(nodo1)) {
|
||||
// El edge ya existe.
|
||||
return;
|
||||
}
|
||||
|
||||
// Insertar un edge de doble camino.
|
||||
grafo.get(nodo1).add(nodo2);
|
||||
}
|
||||
|
||||
class GrafoNodo {
|
||||
private int valor;
|
||||
|
||||
public GrafoNodo(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
|
||||
public int getValor() {
|
||||
return valor;
|
||||
}
|
||||
|
||||
public void setValue(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
}
|
27
src/cl/cromer/estructuras/code/grafoDirigido/insertarNodo
Normal file
27
src/cl/cromer/estructuras/code/grafoDirigido/insertarNodo
Normal file
@@ -0,0 +1,27 @@
|
||||
private final Map<T, Set<T>> grafo = new HashMap<>();
|
||||
|
||||
public void insertarNodo(T nodo) {
|
||||
if (grafo.containsKey(nodo)) {
|
||||
// Ya existe el nodo.
|
||||
return;
|
||||
}
|
||||
|
||||
// Insertar el nodo nuevo.
|
||||
grafo.put(nodo, new HashSet<>());
|
||||
}
|
||||
|
||||
class GrafoNodo {
|
||||
private int valor;
|
||||
|
||||
public GrafoNodo(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
|
||||
public int getValor() {
|
||||
return valor;
|
||||
}
|
||||
|
||||
public void setValue(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
}
|
28
src/cl/cromer/estructuras/code/grafoNoDirigido/eliminarEdge
Normal file
28
src/cl/cromer/estructuras/code/grafoNoDirigido/eliminarEdge
Normal file
@@ -0,0 +1,28 @@
|
||||
private final Map<T, Set<T>> grafo = new HashMap<>();
|
||||
|
||||
public void eliminarEdge(T nodo1, T nodo2) {
|
||||
if (!grafo.containsKey(nodo1) || !grafo.containsKey(nodo2)) {
|
||||
// Uno de los nodos no existe.
|
||||
return;
|
||||
}
|
||||
|
||||
// Eliminar el edge.
|
||||
grafo.get(nodo1).remove(nodo2);
|
||||
grafo.get(nodo2).remove(nodo1);
|
||||
}
|
||||
|
||||
class GrafoNodo {
|
||||
private int valor;
|
||||
|
||||
public GrafoNodo(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
|
||||
public int getValor() {
|
||||
return valor;
|
||||
}
|
||||
|
||||
public void setValue(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
}
|
27
src/cl/cromer/estructuras/code/grafoNoDirigido/eliminarNodo
Normal file
27
src/cl/cromer/estructuras/code/grafoNoDirigido/eliminarNodo
Normal file
@@ -0,0 +1,27 @@
|
||||
private final Map<T, Set<T>> grafo = new HashMap<>();
|
||||
|
||||
public void eliminarNodo(T nodo) {
|
||||
if (!grafo.containsKey(nodo)) {
|
||||
// No existe el nodo.
|
||||
return;
|
||||
}
|
||||
|
||||
// Remover el nodo.
|
||||
grafo.remove(nodo);
|
||||
}
|
||||
|
||||
class GrafoNodo {
|
||||
private int valor;
|
||||
|
||||
public GrafoNodo(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
|
||||
public int getValor() {
|
||||
return valor;
|
||||
}
|
||||
|
||||
public void setValue(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
}
|
28
src/cl/cromer/estructuras/code/grafoNoDirigido/insertarEdge
Normal file
28
src/cl/cromer/estructuras/code/grafoNoDirigido/insertarEdge
Normal file
@@ -0,0 +1,28 @@
|
||||
private final Map<T, Set<T>> grafo = new HashMap<>();
|
||||
|
||||
public void insertarEdge(T nodo1, T nodo2) {
|
||||
if (!grafo.containsKey(nodo1) || !grafo.containsKey(nodo2)) {
|
||||
// Uno de los nodos no existe.
|
||||
return;
|
||||
}
|
||||
|
||||
// Insertar un edge de doble camino.
|
||||
grafo.get(nodo1).add(nodo2);
|
||||
grafo.get(nodo2).add(nodo1);
|
||||
}
|
||||
|
||||
class GrafoNodo {
|
||||
private int valor;
|
||||
|
||||
public GrafoNodo(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
|
||||
public int getValor() {
|
||||
return valor;
|
||||
}
|
||||
|
||||
public void setValue(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
}
|
27
src/cl/cromer/estructuras/code/grafoNoDirigido/insertarNodo
Normal file
27
src/cl/cromer/estructuras/code/grafoNoDirigido/insertarNodo
Normal file
@@ -0,0 +1,27 @@
|
||||
private final Map<T, Set<T>> grafo = new HashMap<>();
|
||||
|
||||
public void insertarNodo(T nodo) {
|
||||
if (grafo.containsKey(nodo)) {
|
||||
// Ya existe el nodo.
|
||||
return;
|
||||
}
|
||||
|
||||
// Insertar el nodo nuevo.
|
||||
grafo.put(nodo, new HashSet<>());
|
||||
}
|
||||
|
||||
class GrafoNodo {
|
||||
private int valor;
|
||||
|
||||
public GrafoNodo(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
|
||||
public int getValor() {
|
||||
return valor;
|
||||
}
|
||||
|
||||
public void setValue(int valor) {
|
||||
this.valor = valor;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user