Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
public Arista(){
// Inicializando variables de instancia
this(-1,"");
}
public Arista(int idArista){
// Inicializando variables de instancia
this(-1,"");
}
public Arista(int idArista,String nombreArista){
// Inicializando variables de instancia
this(-1,"",1);
}
public Arista(int idArista,String nombreArista,int peso){
// Inicializando variables de instancia
this.idArista = idArista;
this.nombreArista = nombreArista;
this.distancia = peso;
lineaQuebrada = null;
habilitado = true;
}
public void setIdArista(int idArista){
this.idArista = idArista;
}
public int getIdArista(){
return idArista;
}
public void setNombreArista(String nombreVia){
this.nombreArista = nombreVia;
}
public String getNombreArista(){
return nombreArista;
}
public void setPeso(int peso){
this.distancia = peso;
}
public int getPeso(){
return distancia;
}
public void setLineaQuebrada(LineaQuebrada lineaQuebrada){
this.lineaQuebrada = lineaQuebrada;
if(lineaQuebrada != null){
this.lineaQuebrada.setLongitud(distancia);
}
}
public LineaQuebrada getLineaQuebrada(){
return lineaQuebrada;
}
((Graphics2D)g).setStroke(new BasicStroke(getGrosorBorde()));
((Graphics2D)g).fillOval(coordenadas.get(0)[0],coordenadas.get(0)
[1],diametro,diametro);
((Graphics2D)g).setColor(Color.black);
((Graphics2D)g).drawOval(coordenadas.get(0)[0],coordenadas.get(0)
[1],diametro,diametro);
if(!"".equals(etiqueta)){
if(fuente != null){
g.setFont(fuente);
}
((Graphics2D)g).drawString(etiqueta,coordenadas.get(0)[0] -
(izquierda),coordenadas.get(0)[1]);
((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
}
}else{
System.out.println("No hay coordenadas para el circulo");
}
}
public void setColor(Color color){
this.color = color;
}
public Color getColor(){
return color;
}
public void setDiametro(int diametro){
this.diametro = diametro;
}
public int getDiametro(){
return diametro;
}
public void setEtiqueta(String etiqueta){
this.etiqueta= etiqueta;
}
public void setEtiqueta(String etiqueta,boolean izquierda){
this.etiqueta= etiqueta;
}
public String getEtiqueta(){
return etiqueta;
}
public int getX(){
if(coordenadas.size() > 0){
return coordenadas.get(0)[0];
}else{
return -1;
}
}
public int getY(){
if(coordenadas.size() > 0){
return coordenadas.get(0)[1];
}else{
return -1;
}
}
}
___________________________________________________________________________________
_____________________________
package objetos;
import java.util.ArrayList;
}
___________________________________________________________________________________
________________
package objetos;
/**
* Constructor para objetos de la clase Arista
*/
public Enlace(){
// inicializando variables de instancia
this(new Arista(),new Nodo());
}
public Enlace(Arista arista,Nodo nodo){
// inicializando variables de instancia
this.arista = arista;
this.nodo = nodo;
}
public void setArista(Arista arista){
this.arista = arista;
}
public Arista getArista(){
return arista;
}
public void setNodo(Nodo nodo){
this.nodo = nodo;
}
public Nodo getNodo(){
return nodo;
}
}
___________________________________________________________________________________
_____________
package objetos;
import java.awt.Color;
import java.util.ArrayList;
public Grafo(){
listaNodo = new ArrayList<Nodo>();
}
public boolean adjuntarNodo(Nodo nodo){
Nodo nodoTemp = buscarNodo(nodo.getDato());
if(nodoTemp == null){
listaNodo.add(nodo);
return true;
}else{
return false;
}
}
enlace.getArista().getLineaQuebrada().setColor(Color.black);
enlace.getArista().getLineaQuebrada().setGrosorLinea(1);
}
}
}
}
}
}
public ArrayList<Arista> aristasEntrante(Nodo nodo){
ArrayList<Arista> listaArista = null;
for(Nodo n:listaNodo){
ArrayList<Enlace> enlaces = n.getListaNodoAdyacente();
if(enlaces != null){
listaArista = new ArrayList<Arista>();
for(Enlace e:enlaces){
if(e.getNodo()==nodo){
listaArista.add(e.getArista());
}
}
}
}
return listaArista;
}
public ArrayList<Arista> aristasSaliente(Nodo nodo){
ArrayList<Arista> listaArista = null;
if(nodo != null){
if(listaNodo.contains(nodo)){
ArrayList<Enlace> listaEnlace = nodo.getListaNodoAdyacente();
if(listaArista != null){
listaArista = new ArrayList<Arista>();
for(Enlace e:listaEnlace){
listaArista.add(e.getArista());
}
}
}
}
return listaArista;
}
if(mostrarEtiqueta){
((Graphics2D)g).setColor(Color.blue);
Font fuente=new Font("Monospaced",Font.BOLD, 12);
g.setFont(fuente);
if(coordenadas.size() == 2){
int xMenor = menor(coordenadas.get(0)[0],coordenadas.get(1)
[0]);
int yMenor = menor(coordenadas.get(0)[1],coordenadas.get(1)
[1]);
((Graphics2D)g).drawString(longitud+"",coordenadas.get(pos)
[0]+3,coordenadas.get(pos)[1]-8);
}
}
}
}
private int mayor(int n1,int n2){
return (n1 > n2) ? n1 : n2;
}
private int menor(int n1,int n2){
return (n1 < n2) ? n1 : n2;
}
public void setColor(Color color){
this.color = color;
}
public Color getColor(){
return color;
}
public void setGrosorLinea(float grosorLinea){
this.grosorLinea = grosorLinea;
}
public float getGrosorLinea(){
return grosorLinea;
}
public void setEtiqueta(String etiqueta){
this.etiqueta= etiqueta;
}
public String getEtiqueta(){
return etiqueta;
}
}
___________________________________________________________________________________
______________________
package objetos;
import java.util.ArrayList;
public Nodo(){
this.dato = new Object();
circulo = null;
izquierda = 0;
inicializarParaDisjktra();
}
}
___________________________________________________________________________________
____________________
package operaciones;
import java.awt.Color;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import objetos.Arista;
import objetos.Enlace;
import objetos.Grafo;
import objetos.Nodo;
if(listaNodosAdyacentes.isContenido(aux2)){
int longitud = nodo.getLongitudCamino() +
enlace.getArista().getPeso();
if(aux2.getLongitudCamino() > longitud){
aux2.setLongitudCamino(longitud);
aux2.setNodoAntecesorDisjktra(nodo);
}
}else{
aux2.setLongitudCamino(nodo.getLongitudCamino() +
enlace.getArista().getPeso());
aux2.setNodoAntecesorDisjktra(nodo);
listaNodosAdyacentes.add(aux2);
}
}
}
}
}
}
public void ejecutar(Nodo nodoInicio){
nodoInicio.setLongitudCamino(0);
if(nodoInicio != null){
listaNodosAdyacentes = new ListaNodo();
listaNodosAdyacentes.add(nodoInicio);
while(!listaNodosAdyacentes.isEmpty()){
Nodo menor = listaNodosAdyacentes.buscarMenor();
menor.setMarca(true);
listaNodosAdyacentes.remove(menor);
llenarConAdyacentes(menor);
}
}
}
}
public void marcarRutaCorta(Nodo nodoFinal,Color color){
if(nodoFinal != null){
rutaCorta(nodoFinal);
for(int i = 0;i < aux.size();i++){
if(!aux.isEmpty()){
aux.get(i).getLineaQuebrada().setColor(color);
aux.get(i).getLineaQuebrada().setGrosorLinea(4);
}
}
}
}
}
___________________________________________________________________________________
____________________
package operaciones;
import java.util.ArrayList;
import objetos.Nodo;
public ListaNodo(){
super();
}
public Nodo buscarMenor(){
Nodo aux = new Nodo();
aux.setLongitudCamino(9999999);
for(Nodo nodo:this){
if(nodo.getLongitudCamino() < aux.getLongitudCamino()){
aux = nodo;
}
}
return aux;
}
public boolean isContenido(Nodo nodo){
boolean retornado = false;
for(Nodo n:this){
if(n == nodo){
retornado = true;
}
}
return retornado;
}
}
___________________________________________________________________________________
_______________________
package ventana;
import java.awt.Color;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import objetos.*;
import operaciones.Disjktra;
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
"Algoritmo de Dijkstra", javax.swing.border.TitledBorder.CENTER,
javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 1,
18))); // NOI18N
jPanel2.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
jPanel1.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
jPanel1MouseClicked(evt);
}
});
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 629, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 409, Short.MAX_VALUE)
);
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING,
jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addContainerGap())
);
enlace.getArista().getLineaQuebrada().dibujarLineaQuebrada(jPanel1.getGraphics());
}
}
}
}
private int ingresarPeso(){
String peso = JOptionPane.showInputDialog("Digite la distancia entre
puntos");
int intPeso = 0;
try{
intPeso = Integer.parseInt(peso);
}catch(Exception ex){
intPeso = ingresarPeso();
}
return intPeso;
}
}
}
int x = evt.getX();
int y = evt.getY();
if(evt.isMetaDown()){
// eliminarNodo(x, y);
// JOptionPane.showMessageDialog(this,"Clic derecho");
if(grafo.buscarNodo(x, y)!=null){//si se hace clic sobre un nodo
if(nodoInicio == null){
grafo.reiniciarGrafoParaDisjktra();
grafo.reiniciarColores();
nodoInicio = grafo.buscarNodo(x, y);//nodoInicio lo pongo a apuntar
al nodo donde hice clic
nodoInicio.getCirculo().setColor(Color.red);//Lo hago cambiar de
color
// JOptionPane.showMessageDialog(null,"Seleccione otro nodo para
crear una arista");
}else{//si nodoInicio ya estaba apunto a un nodo, lo preparo para crear
arista
nodoFin = grafo.buscarNodo(x, y);
Disjktra disjktra = new Disjktra(grafo);
disjktra.ejecutar(nodoInicio);
disjktra.marcarRutaCorta(nodoFin, Color.red);
// crearArista();
//
// nodoInicio.getCirculo().setColor(Color.yellow);//lo regreso a su
color original
//
nodoInicio = null;//null para poder crear mas arista
nodoFin = null;//null para poder crear mas arista
}
}
}else{
if(grafo.buscarNodo(x, y)!=null){//si se hace clic sobre un nodo
if(nodoInicio == null){
nodoInicio = grafo.buscarNodo(x, y);//nodoInicio lo pongo a apuntar
al nodo donde hice clic
nodoInicio.getCirculo().setColor(Color.red);//Lo hago cambiar de
color
// JOptionPane.showMessageDialog(null,"Seleccione otro nodo para
crear una arista");
}else{//si nodoInicio ya estaba apunto a un nodo, lo preparo para crear
arista
nodoFin = grafo.buscarNodo(x, y);
crearArista();
nodoInicio.getCirculo().setColor(Color.yellow);//lo regreso a su
color original
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
/*
* Set the Nimbus look and feel
*/
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code
(optional) ">
/*
* If Nimbus (introduced in Java SE 6) is not available, stay with the
* default look and feel. For details see
* http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info :
javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Gui.class.getName()).log(java.util.logging.Level
.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Gui.class.getName()).log(java.util.logging.Level
.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Gui.class.getName()).log(java.util.logging.Level
.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Gui.class.getName()).log(java.util.logging.Level
.SEVERE, null, ex);
}
//</editor-fold>
/*
* Create and display the form
*/
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
new Gui().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
// End of variables declaration
}