SlideShare una empresa de Scribd logo
1 de 8
UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA
VICERRECTORADO ACADEMICO
COORDINACIÓN GENERAL DE INVESTIGACIÓN Y POSTGRADO
MAESTRÍA EN TECNOLOGÍAS DE LA INFORMACIÓN
GRAFOS PONDERADOS
IMPLEMENTACIÓN
Profesor:
GUEVARA, Carlos
Realizado por
APONTE, Marcel – C.I. 15.372.122
CORTEZ, Ramón – C.I. 15.633.653
HERNANDEZ, Yonel – C.I. 18.948.585
Ciudad Bolívar, Mayo 2015
2
IMPLEMENTACIÓN
Con el fin de realizar la implementación de Grafos Ponderados, haciendo uso de
Programación Orientado a Objetos (POO), que en esta oportunidad se realizó bajo la
plataforma de Java, y usando NetBeans como entorno de desarrollo.
Haciendo uso de la programación orientada a objetos, se procedió a elaborar paquetes de
clases en donde se agrupo de acuerdo a lo siguiente:
 Objetos: En este paquete (package), se definen las clases que se usarán como
base de la parte gráfica (Círculo, Coordenada, LíneaQuebrada) y de la implementación de
los grafos ponderados (Arista, Enlace, Grafo, ListaNodo, Nodo).
 Operaciones: En este paquete (package), se definen las clases de ejecución de los
algoritmos de grafos ponderados a utilizar. En este caso, esquematizamos la
implementación del Algoritmo de Dijkstra y de las Ecuaciones de Bellman.
 Ventana: En este paquete (package), se incluye una sola clase, la cual se encarga
de gestionar todos los eventos del ratón (mouse), y la interfaz del usuario con la
implementación.
DESCRIPCIÓN DE CLASES Y ESTRUCTURAS
Package Objetos
 public class Arista: Representa las aristas del Grafo Ponderado, incluyendo el
Nombre, el Peso de la Arista, así como los datos que representa graficamente a la arista a
través del uso de la clase LineaQuebrada. Se incluyen métodos que permiten la
modificación y/o uso de los atributos de cada arista.
public class Arista{
private int idArista;
private String nombreArista;
private int peso;//Distancia
private LineaQuebrada lineaQuebrada; //Ésta es la via representada
graficamente
private boolean habilitado;
Constructor de la clase, con toda la información requerida.
public Arista(int idArista,String nombreArista,int peso){
this.idArista = idArista;
this.nombreArista = nombreArista;
this.peso = peso;
lineaQuebrada = null;
habilitado = true;
}
 public class circulo: Clase para representar la información gráfica de cada vértice del grafo
ponderado (coordenadas, color, diámetro, etiqueta), así como los métodos para modificar u
3
obtener los atributos de cada vértice; de igual manera, se incluyen los métodos que permiten
dibujar los círculos (vértices) que hacen uso de funciones básicas de Java para ello.
public class Circulo {
private Coordenadas coordenadas;
private Color color;
private int diametro;
private String etiqueta;
private Font fuente;
private int izquierda;
private int grosorBorde;
Constructor de la clase, con toda la información requerida.
public Circulo(Coordenadas coordenadas){
this.coordenadas = coordenadas;
color = Color.yellow;
diametro = 10;
etiqueta = "";
fuente = null;
izquierda = 0;
grosorBorde = 2;
}
Método para el dibujo de cada círculo haciendo uso de las funciones de Java para
ello.
public void dibujarCirculo(Graphics g){
if(coordenadas.size() > 0){
((Graphics2D)g).setColor(color);
((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");
}
}
4
 public class Coordenadas: Esta clase hereda de la clase ArrayList (de Java), en donde se
almacenan las coordenadas en números enteros, y que dicha clase se usa en la clase Círculo.
public class Coordenadas extends ArrayList < int[] >{
private int xMaxima;
private int yMaxima;
Constructores de la clase coordenadas, recibiendo varios parámetros.
public Coordenadas(int xMaxima, int yMaxima){
super();
this.xMaxima = xMaxima;
this.yMaxima = yMaxima;
}
public Coordenadas(int xMaxima, int yMaxima,int x, int y){
super();
this.xMaxima = xMaxima;
this.yMaxima = yMaxima;
addCoordenada(x,y);
}
public void addCoordenada(int x, int y){
if(x >= 0 && x <= xMaxima && y >= 0 && y <= yMaxima){
int[] parXY = {x, y};
add(parXY);
}
}
 public class Enlace: Representa la unión entre la arista y el nodo, para la
implementación de los grafos ponderados. Hace uso en sus atributos de un objeto de la
clase Arista, y un objeto de la clase Nodo.
public class Enlace{
private Arista arista;
private Nodo nodo;
public Enlace(){
this(new Arista(),new Nodo());
}
public Enlace(Arista arista,Nodo nodo){
this.arista = arista;
this.nodo = nodo;
}
 public class Grafo: Clase principal de la implementación de los grafos
ponderados realizadas, donde incluye como atributo un ArrayList de Nodos (clase Nodo).
Este ArrayList es un estructura de datos dinámica que permite almacenar datos en
memoria de forma similar a los arreglos, con la ventaja de que el número de elementos
que almacena, lo hace de forma dinámica, es decir, que no es necesario declarar su
tamaño como pasa con los arreglos.
5
public class Grafo{
private ArrayList<Nodo> listaNodo;
Constructor de la clase Grafo, en donde se crea un nuevo ArrayList.
public Grafo(){
listaNodo = new ArrayList<Nodo>();
}
Método de adjuntar nodo al Grafo, en donde se recibe un nodo y se añade al
ArrayList del grafo. En esta clase se van almacenando todos y cada uno de los nodos.
public boolean adjuntarNodo(Nodo nodo){
Nodo nodoTemp = buscarNodo(nodo.getDato());
if(nodoTemp == null){
listaNodo.add(nodo);
return true;
}
else{
return false;
}
}
En esta clase, se encuentran los metodos para: crear enlaces (añadiendo
nodos adyacentes a un nodo dado), buscar nodo (buscar nodo en el grafo),
obtener adyacentes (getAdyacentes) (para obtener una lista de los nodos adyacentes al
nodo dado), es adyacente (isAdyacente) (recibe dos nodos y retorna si son o no
adyacentes), y así otros métodos para eliminar aristas, nodos, enlaces.
 public class LineaQuebrada: En esta clase se tiene toda la información gráfica
de las aristas del grafo ponderado, y de igual manera incluye los métodos para modificar
y/o asignar las aristas del grafo ponderado.
public class LineaQuebrada {
private Coordenadas coordenadas;
private Color color;
private float grosorLinea;
private String etiqueta;
private int longitud;
private boolean mostrarEtiqueta;
Constructor de la clase LineaQuebrada, en donde por defecto el constructor recibe
como atributo las coordenadas de la línea quebrada, representada a través de la un
objeto de la clase Coordenadas.
public LineaQuebrada(Coordenadas coordenadas){
this.coordenadas = coordenadas;
grosorLinea = 1f;
color = Color.black;
mostrarEtiqueta = true;
}
6
Método para hacer uso de las funciones gráficas de Java para dibujar la
línea de acuerdo a los atributos (coordenadas, color) del objeto que se desee
dibujar.
public void dibujarLineaQuebrada(Graphics g, boolean dirigido){
((Graphics2D)g).setColor(getColor());
((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
BasicStroke stroke = new BasicStroke(grosorLinea);
((Graphics2D)g).setStroke(stroke);
if(coordenadas != null){
int []aux = new int[0];
for(int i = 0; i < coordenadas.size(); i++){
aux = coordenadas.get(i);
if(i == 0){
((Graphics2D)g).drawLine(aux[0],aux[1],aux[0],aux[1]);
}
else{
if (dirigido){
drawArrow(g,coordenadas.get(i - 1)[0],coordenadas.get(i -
1)[1],aux[0],aux[1]);
}
else{
((Graphics2D)g).drawLine(coordenadas.get(i -
1)[0],coordenadas.get(i - 1)[1],aux[0],aux[1]);
}
}
}
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]);
int xMayor =
mayor(coordenadas.get(0)[0],coordenadas.get(1)[0]);
int yMayor =
mayor(coordenadas.get(0)[1],coordenadas.get(1)[1]);
int distanciaVertical = yMayor - yMenor;
int distanciaHorizontal = xMayor - xMenor;
((Graphics2D)g).drawString(longitud+"",(distanciaHorizontal/2) +
xMenor,(distanciaVertical/2) + yMenor);
}
else{
int pos = coordenadas.size() / 2;
((Graphics2D)g).drawString(longitud+"",coordenadas.get(pos)[0]+3,coordenadas.get(pos)[1
]-8);
}
7
}
}
stroke = new BasicStroke(1);
((Graphics2D)g).setStroke(stroke);
}
 public class ListaNodo: Clase que hereda de la clase de Java ArrayList, usado
como parte de la implementación de los grafos ponderados.
public class ListaNodo extends ArrayList<Nodo>{
public ListaNodo(){
super();
}
 public class Nodo: Representa cada vértice o nodo del grafo ponderado, en
donde se almacena el dato de cada uno, así como un ArrayList de Enlace con los nodos
adyacentes,
public class Nodo{
private Object dato;
private ArrayList<Enlace> listaNodoAdyacente;
private boolean visitado = false;
private Circulo circulo;
private int izquierda;
Constructores de la clase Nodo, con la información del nodo y las
coordenadas del mismo.
public Nodo(){
this.dato = new Object();
circulo = null;
izquierda = 0;
}
public Nodo(Object dato,Coordenadas coordenada){
this.dato = dato;
listaNodoAdyacente = new ArrayList<Enlace>();
circulo = new Circulo(coordenada);
circulo.setIzquierda(izquierda);
}
Package Operaciones
Package Ventana
8

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Algoritmo de ordenamiento: Heap Sort
Algoritmo de ordenamiento: Heap SortAlgoritmo de ordenamiento: Heap Sort
Algoritmo de ordenamiento: Heap Sort
 
Función Hash: metodos de división y de medio Cuadrado.
Función Hash: metodos de división y de medio Cuadrado.Función Hash: metodos de división y de medio Cuadrado.
Función Hash: metodos de división y de medio Cuadrado.
 
Heap sort (Monticulos)
Heap sort (Monticulos)Heap sort (Monticulos)
Heap sort (Monticulos)
 
Merge sort
Merge sortMerge sort
Merge sort
 
B and B+ tree
B and B+ treeB and B+ tree
B and B+ tree
 
Hash tables
Hash tablesHash tables
Hash tables
 
Hashing in datastructure
Hashing in datastructureHashing in datastructure
Hashing in datastructure
 
Tablas Hash
Tablas HashTablas Hash
Tablas Hash
 
5. algoritmos de búsqueda
5. algoritmos de búsqueda5. algoritmos de búsqueda
5. algoritmos de búsqueda
 
linked list
linked listlinked list
linked list
 
Doubly Linked List
Doubly Linked ListDoubly Linked List
Doubly Linked List
 
trees in data structure
trees in data structure trees in data structure
trees in data structure
 
Doubly linked list
Doubly linked listDoubly linked list
Doubly linked list
 
Tree in data structure
Tree in data structureTree in data structure
Tree in data structure
 
Arbol b ASIRB
Arbol b ASIRBArbol b ASIRB
Arbol b ASIRB
 
IA CAPITULO 4
IA  CAPITULO 4IA  CAPITULO 4
IA CAPITULO 4
 
Árboles binarios, ABB y AVL
Árboles binarios, ABB y AVLÁrboles binarios, ABB y AVL
Árboles binarios, ABB y AVL
 
Listas,pilas&colas yorka
Listas,pilas&colas yorkaListas,pilas&colas yorka
Listas,pilas&colas yorka
 
1.4.1 Representación en memoria estática y dinámica.pptx
1.4.1 Representación en memoria estática y dinámica.pptx1.4.1 Representación en memoria estática y dinámica.pptx
1.4.1 Representación en memoria estática y dinámica.pptx
 
Unidad IV
Unidad IVUnidad IV
Unidad IV
 

Similar a Grafos Ponderados

Api java 2D
Api  java 2DApi  java 2D
Api java 2DESPOL
 
Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2Axel
 
Métodos constructores, método toString()
Métodos constructores, método toString()Métodos constructores, método toString()
Métodos constructores, método toString()Pablo Macon
 
Introduccion a java3 d
Introduccion a java3 dIntroduccion a java3 d
Introduccion a java3 dFONCODES
 
Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Andres Garcia Garcia
 
Ciencia de redes con R: Una introducción al universo de paquetes para ciencia...
Ciencia de redes con R: Una introducción al universo de paquetes para ciencia...Ciencia de redes con R: Una introducción al universo de paquetes para ciencia...
Ciencia de redes con R: Una introducción al universo de paquetes para ciencia...Software Guru
 
11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()Clara Patricia Avella Ibañez
 
Tutorial network analyst
Tutorial network analystTutorial network analyst
Tutorial network analystCivil Serrano
 
Oracle Spatial de la A a la Z - Unidad 3
Oracle Spatial de la A a la Z - Unidad 3Oracle Spatial de la A a la Z - Unidad 3
Oracle Spatial de la A a la Z - Unidad 3Jorge Ulises
 
Codemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilCodemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilJavier Abadía
 

Similar a Grafos Ponderados (20)

Api java 2D
Api  java 2DApi  java 2D
Api java 2D
 
Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2
 
Clase 10. CSS 6.pdf
Clase 10. CSS 6.pdfClase 10. CSS 6.pdf
Clase 10. CSS 6.pdf
 
Métodos constructores, método toString()
Métodos constructores, método toString()Métodos constructores, método toString()
Métodos constructores, método toString()
 
02 tda1 t2018
02 tda1 t201802 tda1 t2018
02 tda1 t2018
 
Java 2 d
Java 2 dJava 2 d
Java 2 d
 
Sistema de Taxi Compartido - Java
Sistema de Taxi Compartido - JavaSistema de Taxi Compartido - Java
Sistema de Taxi Compartido - Java
 
Introduccion a java3 d
Introduccion a java3 dIntroduccion a java3 d
Introduccion a java3 d
 
MéTodos
MéTodosMéTodos
MéTodos
 
Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2Introducción a la programación y la informática. Tema 2
Introducción a la programación y la informática. Tema 2
 
Ciencia de redes con R: Una introducción al universo de paquetes para ciencia...
Ciencia de redes con R: Una introducción al universo de paquetes para ciencia...Ciencia de redes con R: Una introducción al universo de paquetes para ciencia...
Ciencia de redes con R: Una introducción al universo de paquetes para ciencia...
 
MéTodos
MéTodosMéTodos
MéTodos
 
MéTodos
MéTodosMéTodos
MéTodos
 
11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()11 Curso de POO en java - métodos constructores y toString()
11 Curso de POO en java - métodos constructores y toString()
 
Tutorial network analyst
Tutorial network analystTutorial network analyst
Tutorial network analyst
 
Oracle Spatial de la A a la Z - Unidad 3
Oracle Spatial de la A a la Z - Unidad 3Oracle Spatial de la A a la Z - Unidad 3
Oracle Spatial de la A a la Z - Unidad 3
 
Grafos
GrafosGrafos
Grafos
 
Grafos
GrafosGrafos
Grafos
 
Grafos
GrafosGrafos
Grafos
 
Codemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilCodemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícil
 

Más de Marcel Aponte

Instructivo de Laboratorios - Telemática - UNEG
Instructivo de Laboratorios - Telemática - UNEGInstructivo de Laboratorios - Telemática - UNEG
Instructivo de Laboratorios - Telemática - UNEGMarcel Aponte
 
Instructivo Wireless (Laboratorio 1)
Instructivo Wireless (Laboratorio 1)Instructivo Wireless (Laboratorio 1)
Instructivo Wireless (Laboratorio 1)Marcel Aponte
 
Propuesta Microsoft.NET
Propuesta Microsoft.NETPropuesta Microsoft.NET
Propuesta Microsoft.NETMarcel Aponte
 
Microsoft .NET Propuesta
Microsoft .NET PropuestaMicrosoft .NET Propuesta
Microsoft .NET PropuestaMarcel Aponte
 
Gestión de la Calidad
Gestión de la CalidadGestión de la Calidad
Gestión de la CalidadMarcel Aponte
 
Sistemas Orientados a Objetos
Sistemas Orientados a ObjetosSistemas Orientados a Objetos
Sistemas Orientados a ObjetosMarcel Aponte
 
Análisis de Requerimientos
Análisis de RequerimientosAnálisis de Requerimientos
Análisis de RequerimientosMarcel Aponte
 
Plan de Recuperación de Desastres - TI
Plan de Recuperación de Desastres - TIPlan de Recuperación de Desastres - TI
Plan de Recuperación de Desastres - TIMarcel Aponte
 
Construcción de un Mapa Conceptual de la Ingeniería del Software
Construcción de un Mapa Conceptual de la Ingeniería del SoftwareConstrucción de un Mapa Conceptual de la Ingeniería del Software
Construcción de un Mapa Conceptual de la Ingeniería del SoftwareMarcel Aponte
 
Ingeniería del Software Libre (ISL)
Ingeniería del Software Libre (ISL) Ingeniería del Software Libre (ISL)
Ingeniería del Software Libre (ISL) Marcel Aponte
 

Más de Marcel Aponte (10)

Instructivo de Laboratorios - Telemática - UNEG
Instructivo de Laboratorios - Telemática - UNEGInstructivo de Laboratorios - Telemática - UNEG
Instructivo de Laboratorios - Telemática - UNEG
 
Instructivo Wireless (Laboratorio 1)
Instructivo Wireless (Laboratorio 1)Instructivo Wireless (Laboratorio 1)
Instructivo Wireless (Laboratorio 1)
 
Propuesta Microsoft.NET
Propuesta Microsoft.NETPropuesta Microsoft.NET
Propuesta Microsoft.NET
 
Microsoft .NET Propuesta
Microsoft .NET PropuestaMicrosoft .NET Propuesta
Microsoft .NET Propuesta
 
Gestión de la Calidad
Gestión de la CalidadGestión de la Calidad
Gestión de la Calidad
 
Sistemas Orientados a Objetos
Sistemas Orientados a ObjetosSistemas Orientados a Objetos
Sistemas Orientados a Objetos
 
Análisis de Requerimientos
Análisis de RequerimientosAnálisis de Requerimientos
Análisis de Requerimientos
 
Plan de Recuperación de Desastres - TI
Plan de Recuperación de Desastres - TIPlan de Recuperación de Desastres - TI
Plan de Recuperación de Desastres - TI
 
Construcción de un Mapa Conceptual de la Ingeniería del Software
Construcción de un Mapa Conceptual de la Ingeniería del SoftwareConstrucción de un Mapa Conceptual de la Ingeniería del Software
Construcción de un Mapa Conceptual de la Ingeniería del Software
 
Ingeniería del Software Libre (ISL)
Ingeniería del Software Libre (ISL) Ingeniería del Software Libre (ISL)
Ingeniería del Software Libre (ISL)
 

Último

Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 

Último (20)

Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 

Grafos Ponderados

  • 1. UNIVERSIDAD NACIONAL EXPERIMENTAL DE GUAYANA VICERRECTORADO ACADEMICO COORDINACIÓN GENERAL DE INVESTIGACIÓN Y POSTGRADO MAESTRÍA EN TECNOLOGÍAS DE LA INFORMACIÓN GRAFOS PONDERADOS IMPLEMENTACIÓN Profesor: GUEVARA, Carlos Realizado por APONTE, Marcel – C.I. 15.372.122 CORTEZ, Ramón – C.I. 15.633.653 HERNANDEZ, Yonel – C.I. 18.948.585 Ciudad Bolívar, Mayo 2015
  • 2. 2 IMPLEMENTACIÓN Con el fin de realizar la implementación de Grafos Ponderados, haciendo uso de Programación Orientado a Objetos (POO), que en esta oportunidad se realizó bajo la plataforma de Java, y usando NetBeans como entorno de desarrollo. Haciendo uso de la programación orientada a objetos, se procedió a elaborar paquetes de clases en donde se agrupo de acuerdo a lo siguiente:  Objetos: En este paquete (package), se definen las clases que se usarán como base de la parte gráfica (Círculo, Coordenada, LíneaQuebrada) y de la implementación de los grafos ponderados (Arista, Enlace, Grafo, ListaNodo, Nodo).  Operaciones: En este paquete (package), se definen las clases de ejecución de los algoritmos de grafos ponderados a utilizar. En este caso, esquematizamos la implementación del Algoritmo de Dijkstra y de las Ecuaciones de Bellman.  Ventana: En este paquete (package), se incluye una sola clase, la cual se encarga de gestionar todos los eventos del ratón (mouse), y la interfaz del usuario con la implementación. DESCRIPCIÓN DE CLASES Y ESTRUCTURAS Package Objetos  public class Arista: Representa las aristas del Grafo Ponderado, incluyendo el Nombre, el Peso de la Arista, así como los datos que representa graficamente a la arista a través del uso de la clase LineaQuebrada. Se incluyen métodos que permiten la modificación y/o uso de los atributos de cada arista. public class Arista{ private int idArista; private String nombreArista; private int peso;//Distancia private LineaQuebrada lineaQuebrada; //Ésta es la via representada graficamente private boolean habilitado; Constructor de la clase, con toda la información requerida. public Arista(int idArista,String nombreArista,int peso){ this.idArista = idArista; this.nombreArista = nombreArista; this.peso = peso; lineaQuebrada = null; habilitado = true; }  public class circulo: Clase para representar la información gráfica de cada vértice del grafo ponderado (coordenadas, color, diámetro, etiqueta), así como los métodos para modificar u
  • 3. 3 obtener los atributos de cada vértice; de igual manera, se incluyen los métodos que permiten dibujar los círculos (vértices) que hacen uso de funciones básicas de Java para ello. public class Circulo { private Coordenadas coordenadas; private Color color; private int diametro; private String etiqueta; private Font fuente; private int izquierda; private int grosorBorde; Constructor de la clase, con toda la información requerida. public Circulo(Coordenadas coordenadas){ this.coordenadas = coordenadas; color = Color.yellow; diametro = 10; etiqueta = ""; fuente = null; izquierda = 0; grosorBorde = 2; } Método para el dibujo de cada círculo haciendo uso de las funciones de Java para ello. public void dibujarCirculo(Graphics g){ if(coordenadas.size() > 0){ ((Graphics2D)g).setColor(color); ((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"); } }
  • 4. 4  public class Coordenadas: Esta clase hereda de la clase ArrayList (de Java), en donde se almacenan las coordenadas en números enteros, y que dicha clase se usa en la clase Círculo. public class Coordenadas extends ArrayList < int[] >{ private int xMaxima; private int yMaxima; Constructores de la clase coordenadas, recibiendo varios parámetros. public Coordenadas(int xMaxima, int yMaxima){ super(); this.xMaxima = xMaxima; this.yMaxima = yMaxima; } public Coordenadas(int xMaxima, int yMaxima,int x, int y){ super(); this.xMaxima = xMaxima; this.yMaxima = yMaxima; addCoordenada(x,y); } public void addCoordenada(int x, int y){ if(x >= 0 && x <= xMaxima && y >= 0 && y <= yMaxima){ int[] parXY = {x, y}; add(parXY); } }  public class Enlace: Representa la unión entre la arista y el nodo, para la implementación de los grafos ponderados. Hace uso en sus atributos de un objeto de la clase Arista, y un objeto de la clase Nodo. public class Enlace{ private Arista arista; private Nodo nodo; public Enlace(){ this(new Arista(),new Nodo()); } public Enlace(Arista arista,Nodo nodo){ this.arista = arista; this.nodo = nodo; }  public class Grafo: Clase principal de la implementación de los grafos ponderados realizadas, donde incluye como atributo un ArrayList de Nodos (clase Nodo). Este ArrayList es un estructura de datos dinámica que permite almacenar datos en memoria de forma similar a los arreglos, con la ventaja de que el número de elementos que almacena, lo hace de forma dinámica, es decir, que no es necesario declarar su tamaño como pasa con los arreglos.
  • 5. 5 public class Grafo{ private ArrayList<Nodo> listaNodo; Constructor de la clase Grafo, en donde se crea un nuevo ArrayList. public Grafo(){ listaNodo = new ArrayList<Nodo>(); } Método de adjuntar nodo al Grafo, en donde se recibe un nodo y se añade al ArrayList del grafo. En esta clase se van almacenando todos y cada uno de los nodos. public boolean adjuntarNodo(Nodo nodo){ Nodo nodoTemp = buscarNodo(nodo.getDato()); if(nodoTemp == null){ listaNodo.add(nodo); return true; } else{ return false; } } En esta clase, se encuentran los metodos para: crear enlaces (añadiendo nodos adyacentes a un nodo dado), buscar nodo (buscar nodo en el grafo), obtener adyacentes (getAdyacentes) (para obtener una lista de los nodos adyacentes al nodo dado), es adyacente (isAdyacente) (recibe dos nodos y retorna si son o no adyacentes), y así otros métodos para eliminar aristas, nodos, enlaces.  public class LineaQuebrada: En esta clase se tiene toda la información gráfica de las aristas del grafo ponderado, y de igual manera incluye los métodos para modificar y/o asignar las aristas del grafo ponderado. public class LineaQuebrada { private Coordenadas coordenadas; private Color color; private float grosorLinea; private String etiqueta; private int longitud; private boolean mostrarEtiqueta; Constructor de la clase LineaQuebrada, en donde por defecto el constructor recibe como atributo las coordenadas de la línea quebrada, representada a través de la un objeto de la clase Coordenadas. public LineaQuebrada(Coordenadas coordenadas){ this.coordenadas = coordenadas; grosorLinea = 1f; color = Color.black; mostrarEtiqueta = true; }
  • 6. 6 Método para hacer uso de las funciones gráficas de Java para dibujar la línea de acuerdo a los atributos (coordenadas, color) del objeto que se desee dibujar. public void dibujarLineaQuebrada(Graphics g, boolean dirigido){ ((Graphics2D)g).setColor(getColor()); ((Graphics2D)g).setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); BasicStroke stroke = new BasicStroke(grosorLinea); ((Graphics2D)g).setStroke(stroke); if(coordenadas != null){ int []aux = new int[0]; for(int i = 0; i < coordenadas.size(); i++){ aux = coordenadas.get(i); if(i == 0){ ((Graphics2D)g).drawLine(aux[0],aux[1],aux[0],aux[1]); } else{ if (dirigido){ drawArrow(g,coordenadas.get(i - 1)[0],coordenadas.get(i - 1)[1],aux[0],aux[1]); } else{ ((Graphics2D)g).drawLine(coordenadas.get(i - 1)[0],coordenadas.get(i - 1)[1],aux[0],aux[1]); } } } 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]); int xMayor = mayor(coordenadas.get(0)[0],coordenadas.get(1)[0]); int yMayor = mayor(coordenadas.get(0)[1],coordenadas.get(1)[1]); int distanciaVertical = yMayor - yMenor; int distanciaHorizontal = xMayor - xMenor; ((Graphics2D)g).drawString(longitud+"",(distanciaHorizontal/2) + xMenor,(distanciaVertical/2) + yMenor); } else{ int pos = coordenadas.size() / 2; ((Graphics2D)g).drawString(longitud+"",coordenadas.get(pos)[0]+3,coordenadas.get(pos)[1 ]-8); }
  • 7. 7 } } stroke = new BasicStroke(1); ((Graphics2D)g).setStroke(stroke); }  public class ListaNodo: Clase que hereda de la clase de Java ArrayList, usado como parte de la implementación de los grafos ponderados. public class ListaNodo extends ArrayList<Nodo>{ public ListaNodo(){ super(); }  public class Nodo: Representa cada vértice o nodo del grafo ponderado, en donde se almacena el dato de cada uno, así como un ArrayList de Enlace con los nodos adyacentes, public class Nodo{ private Object dato; private ArrayList<Enlace> listaNodoAdyacente; private boolean visitado = false; private Circulo circulo; private int izquierda; Constructores de la clase Nodo, con la información del nodo y las coordenadas del mismo. public Nodo(){ this.dato = new Object(); circulo = null; izquierda = 0; } public Nodo(Object dato,Coordenadas coordenada){ this.dato = dato; listaNodoAdyacente = new ArrayList<Enlace>(); circulo = new Circulo(coordenada); circulo.setIzquierda(izquierda); } Package Operaciones Package Ventana
  • 8. 8