Graph updates for code display.

This commit is contained in:
Chris Cromer
2016-07-19 17:03:24 -04:00
parent a3e286d3e7
commit e90c170aee
142 changed files with 553 additions and 223 deletions

View File

@@ -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;

View File

@@ -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();

View File

@@ -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;
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}