Tema 5 Grafos. Implementación (I)..

Slides:



Advertisements
Presentaciones similares
Arreglos Unidimensionales y Bidimensionales ESTRUCTURAS DE DATOS I
Advertisements

5. Estructuras no lineales estáticas y dinámicas
PRACTICO N° 6 GRAFOS año: 2012.
GRAFOS ESTRUCTURAS DE DATOS.
Listas enlazadas c++ Prof. Franklin Cedeño.
Programación II Listas
Estructuras de datos y algoritmos
Utilización de un TAD Arbol.
MATEMÁTICAS DISCRETAS.
Tema 5 Grafos..
Árboles binarios. Algoritmos básicos
Tema 1. Introducción a la programación (Lenguaje java).
Tratamiento de listas en Java
Tema 5 Grafos. Recorridos..
Tema 4 Árboles. Árbol sobre matriz.
2.4 Construcción de un TAD a partir de otro.
Abstracción de Datos La abstracción es un recurso fundamental en la programación orientada a objetos y está además fuertemente ligado a reusabilidad.
Implementación de Listas
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Genericidad Una clase genérica encapsula una estructura y brinda un conjunto de servicios cuya implementación no depende del tipo de las componentes.
Genericidad Los datos de aplicaciones muy diferentes puede modelarse con frecuencia a partir de tipos de datos cuyas operaciones no dependen del tipo de.
Vectores en java.
Método en Java.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
0. Desarrollo de Programas: técnica del refinamiento.
Slide 7-1 Copyright © 2003 Pearson Education, Inc. Figure: Estructuras de datos.
Diplomado en Informática Aplicada
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Tema 5 Grafos.. Grafos Un grafo se define como un par G = (V, A), donde V es un conjunto finito no vacío de vértices A es un conjunto de pares de vértices.
6. Herencia. Clases abstractas. Genericidad
Colecciones.
AED I. Estructuras de Datos.
GRAFOS HUGO ARAYA CARRASCO.
PROGRAMACIÓN PARALELA EN ALGORITMOS SOBRE GRAFOS
Material de apoyo Unidad 4 Estructura de datos
Grafos. Un Grafo G es un par de conjuntos (V, E), donde V es un conjunto no vacío de elementos llamados vértices o nodos y E es un conjunto formado por.
Suponiendo que además en la clase U hay: import java.util.*; class U{ static Scanner teclado = new Scanner(System.in); static public int readInt(String.
Patrón Observador Un patrón de diseño es una descripción de clases y objetos comunicándose entre si adaptada para resolver un problema de diseño general.
El lenguaje de programación Java
JAVA J.A.C..
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
ESTRUCTURAS DE DATOS I Conocer, comprender y analizar algunos de los principales tipos de estructuras de datos.
Estructura de Datos y Algoritmos
Capítulo 1 “Elementos de Programación”
ESTRUCTURA DE DATOS EN JAVA
Grafo Juan Ramón Pérez Pérez Prácticas EDI - © Juan Ramón Pérez1.
Arboles M.C. José Andrés Vázquez FCC/BUAP
METODOLOGÍA DE LA PROGRAMACIÓN
Pilas y Colas Estructuras de Datos.
s t a c b d Grafos.
Grafos..
Algoritmos y Estructura de Datos
Estructuras de datos Fundamentos de análisis y diseño de algoritmos.
UNIDAD 2 Grafos Árboles abarcadores mínimos Caminos más cortos.
Entrada y Salida ES.leerChar (); ES.leerEntero (); ES.leerEnteroLargo (); ES.leerFloat (); ES.leerDouble (); System.out.print System.out.println.
GRAFOS.
Ing. Esp. Ricardo Cujar.  Lenguaje de programación orientado a objetos.  Desarrollado por Sun MicroSystems.  Independiente del Sistema Operativo gracias.
Listas. Utilización de un TAD Lista. Interfaz del TAD LISTA public interface Lista { void crearNodo (); /*Crea un nuevo nodo en el TadLista*/ int devolverClave.
Introducción a la Programación Orientada a Objetos Arreglos de 2 dimensiones TDA Matriz Implementar un TDA Matriz que brinde operaciones para calcular.
M.C. Meliza Contreras González
Algoritmos y Programación III 4. Colecciones, excepciones Carlos Fontela, 2006.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Tipo.
LE, EI, Profesor Ramón Castro Liceaga UNIVERSIDAD LATINA (UNILA) V. GESTIÓN DE TIPOS Y GENERACIÓN DE CÓDIGOS.
Listas Dinámicas.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Arreglo.
1 ListaUna Lista se define como una serie de N elementos E 1, E 2,..., E N, ordenados de manera consecutiva, es decir, el elemento E k (que se denomina.
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
UNIVERSIDAD TECNOLÓGICA DE PANAMÁ Facultad de Ingeniería de Sistemas Computacionales Programa de Lic. en Informática Educativa Computación.
Tipos genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 3.
2. Arreglos e invariantes. Arreglos Un arreglo es una coleccion ordenada de elementos del mismo tipo – Tipos de datos primitivos (int, …) – Referencias.
Transcripción de la presentación:

Tema 5 Grafos. Implementación (I).

Implementación de Grafos: Matriz de Adyacencias

Matriz de adyacencias Tabla bidimensional que guarda las adyacencias entre pares de vértices de un grafo. Vértices: enteros en el conjunto {0,1,…,n-1} Aristas: pares de tales enteros. Cada fila y cada columna representan un vértice del grafo y cada posición representa una arista (o la ausencia de esta) cuyo vértice origen se encuentra en la fila y vértice final se encuentra en la columna.

Ejemplos Grafo no dirigido Grafo dirigido matriz simétrica a b c d e a 1 a b c d e 1 matriz simétrica

Representación en matriz de adyacencias Los vértices se representan mediante índices. a b c d e Vértices: a b c d e Índices: 0 1 2 3 4 Matriz de adyacencias se implementa como un vector A bidimensional de n x n donde: La celda [i, j] guarda información referente a la arista (v, w) donde v es el vértice con índice i y w es el vértice con índice j. Para grafos no etiquetados, las celdas guardan valores booleanos: true: existe la arista false: no existe la arista

Clase GrafoMA en JAVA public class GrafoMA implements Grafo { boolean dirigido; int maxNodos; int numVertices; boolean matrizAdy[ ][ ]; } Grafos simples, dirigidos o no dirigidos, no etiquetados Dos constructores: grafo vacío y grafo de tamaño n. public GrafoMA (boolean d) { maxNodos = numVertices = 0; dirigido = d; } public GrafoMA (int n, boolean d) { maxNodos = n; numVertices = 0; matrizAdy = new boolean[n][n];

Insertar aristas La inserción de una arista (i, j) en la matriz supone asignar a la celda correspondiente el valor true. En grafo dirigido: las filas representan el vértice origen (i) las columnas representan el vértice destino (j) En grafo no dirigido: La arista (i,j) es igual a la arista (j,i) (para que la matriz mantenga la propiedad de la simetría. public void insertaArista (int i, int j) { matrizAdy [i] [j] = true; if (!dirigido) matrizAdy [j] [i] = matrizAdy [i] [j]; }

Eliminar aristas La eliminación de una arista (i, j) en la matriz supone asignar a la celda correspondiente el valor false. public void eliminarArista (int i, int j) { matrizAdy [i] [j] = false; if (!dirigido) matrizAdy [j] [i] = false; }

Insertar vértices El tratamiento de los vértices implicaría modificar el tamaño de la tabla (o modificar los índices en caso de querer eliminar un vértice): Simplificación del método: No se permite añadir vértices si se supera el tamaño máximo del grafo (valor del campo maxNodos). Si el número de nodos es menor al tamaño máximo, se asigna el valor false a las celdas correspondientes y se actualiza el campo numVertices

Insertar vértices Método que inserta n vértices en la tabla si existe espacio para ellos: public void insertaVertice (int n) { if ( n > maxNodos - numVertices ) System.out.println ("Error, se supera el número de nodos máximo"); else { for (int i = 0; i < numVertices + n; i++) { for (int j = numVertices; j < numVertices + n; j++) matrizAdy [i] [j] = matrizAdy [j] [i] = false; } numVertices = numVertices + n;

Grado de salida y entrada de un vértice (I) b c d e Grado de salida: Dado que las filas representan los vértices origen, el grado de salida de un vértice i es el valor de la suma de la fila i. Grado de entrada: Dado que las columnas representan los vértices destino, el grado de entrada de un vértice j es el valor de la suma de la columna j. a b c d e 1 Grado de salida (a) = 1 Grado de entrada (a)= 2

Grado de salida y entrada de un vértice (II) public int gradoIn (int x) { int gIn = 0; for (int i = 0; i < numVertices; i++) //recorrido por filas if (matrizAdy [i] [x]) //manteniendo la posición de la columna en [ x ] gIn++; return gIn; } public int gradoOut (int x) { int gOut = 0; for (int j = 0; j < numVertices; j++) //recorrido por columnas if (matrizAdy [x] [j]) // manteniendo la posición de la fila en [ x ] gOut++; return gOut; }

Incidencia de un vértice y tamaño del grafo Grafo no dirigido: la incidencia de un vértice viene dada por su grado de entrada Grafo dirigido: grado de entrada + grado de salida Tamaño: Definido por el número de aristas. Si el grafo es no dirigido, las aristas se cuentan dos veces, luego se ha de dividir entre dos el número de aristas contadas. public int incidencia (int i) { if (!dirigido) return gradoIn (i); else return gradoIn (i) + gradoOut (i); } public int tamano () { int tm = 0; for (int I = 0; I < numVertices; i++) for (int j =0; j < numVertices; j++) if (matrizAdy [i] [j]) tm++; if (dirigido) return tm; else return tm/2; }

Método que comprueba si un grafo es dirigido Para comprobar si un grafo es dirigido o no, basta con comprobar si se trata de una matriz simétrica, donde la posición [i, j] = [j, i]. public boolean esDirigido (Grafo g) { boolean dir = true; for (int I = 0; I < numVertices; i++) for (int j = 0; j < numVertices; j++) if (matrizAdy [i] [j] != matrizAdy [j] [i]) dir = false; return dir; }