Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Como se puede ver los puntos son los nodos o vrtices, y las lineas son las aristas, en el caso
de la imagen es la representacin grfica de un grafo dirigido ya que las aristas tienen
un nico sentido, ya que de A a D se puede ir pero de D a A no. Si el grafo fuera no dirigido
se podra ya que las aristas no tienen direccin.
Aplicacin
La teora de Grafos se aplica hoy en da en muchos campos, tales como en Internet, ya que
cada computador es un vrtice y la conexin entre ellos son las aristas, ademas se usa para
hallar la ruta mas corta en empresas de transporte, y en muchas otras reas.
Imgenes
Cdigo
Clase Principal
package Clases;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.*;
PanelDibujo pd;
int max=0;
JTextField valor;
pd=new PanelDibujo();
add(pd);
@Override
public void actionPerformed(ActionEvent e) {
if(max<10){
try{
Grafo gf=new Grafo(""+Integer.parseInt(valor.getText()));
pd.getVgrafos().add(gf);
pd.repaint();
repaint();
max++;
}catch(NumberFormatException ne){
JOptionPane.showMessageDialog(null, "Digite un numero valido");
}
}
}
});
valor=new JTextField(5);
pdatos.add(new JLabel("Valor Vertice" +
""));
pdatos.add(valor);
pdatos.add(agregar);
add(pdatos,BorderLayout.SOUTH);
Clase PanelDibujo
package Clases;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.Vector;
import javax.swing.*;
int x=150;
int y=150;
int ancho=30;
int alto=30;
public Vector<Integer> xvs;
public Vector<Integer> yvs;
public Vector<Grafo> vgrafos;
int indice=0;
public PanelDibujo(){
vgrafos=new Vector();
xvs=new Vector<Integer>();
yvs=new Vector<Integer>();
setDoubleBuffered(true);
}
import java.util.Vector;
La clase Grafo solo es para almacenar el valor de cada grafo, ademas as es mas orientada a
objetos y facilita la programacin.
La clase PanelDibujo es la que se encargar de dibujar los vrtices o nodos y de pintar las lineas
que vendran a hacer las aristas. Ademas dibuja el valor del vrtice. En esta clase hay una parte
del cdigo que es pura matemtica, esto lo que hace es hacer que el grafo pinte los nodos en
forma circular y as hacer que se vea mas limpia a la vista la grfica.
Lo que hacemos es primero calcular el angulo de separacin entre nodos, por eso 360 lo divido
entre 10, ya que este es el mximo de vrtices a dibujar. Y luego en el para el angulo se va
multiplicando por i, para poder ir movindose y as dibujar correctamente el grafo.
La clase Principal es la encargada de crear el campo de texto para colocar el valor del vrtice a
insertar y de crear el botn que va ir aadiendo vrtices al grafo.
Grafo Dinmico
Ahora veremos como podemos ir construyendo nuestro grafo sencillo paso a paso, podemos ir
colocando nuestros nodos y despues ir asignando las aristas. Este proyecto fue aportado
por Michael Manjarres.
Imgenes
Cdigo
Clase Principal
package Clases;
import javax.swing.JApplet;
Clase lienzo
package Clases;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
int x=0,y=0;
linea linea;
circulo circulo;
circulo jalada=null;
List<circulo> ListCirculo = new ArrayList<circulo>();
List<linea> ListArista = new ArrayList<linea>();
Principal p;
}
}
Clase circulo
package Clases;
import java.awt.*;
import javax.swing.ImageIcon;
int x,y,n;
Image image;
Clase linea
package Clases;
import java.awt.Color;
import java.awt.Graphics;
circulo inicial;
circulo ffinal;
Color color= Color.BLACK;
La clase Principal solo crea un objeto lienzo y lo adiciona para ser mostrado. La clase lienzo es
la encargada de mostrar el grafo, en ella se encuentran dos listas las cuales guardan los nodos
y las lineas que se han creado, para luego ser dibujados en el metodo paintComponent.
La clase circulo tiene la imagen que representa un nodo, ademas muestra el indice del nodo.
La clase linea posee dos nodos el inicial y el final, para poder dibujar la linea entre dichos nodos.