Tema 5 Grafos. Recorridos..

Slides:



Advertisements
Presentaciones similares
Tania Guzmán García Luis González Varela Alexandre González Rivas
Advertisements

PRACTICO N° 6 GRAFOS año: 2012.
GRAFOS Presentado por: Oscar Leonardo Ramírez John Freddy Sandoval
Transformadores Ideales
GRAFOS ESTRUCTURAS DE DATOS.
GRAFOS: ALGORITMOS FUNDAMENTALES
Entendiendo la definición de clases
Estructuras de datos y algoritmos
ALGORITMOS DE ORDENAMIENTO
Utilización de un TAD Arbol.
MATEMÁTICAS DISCRETAS.
Tema 5 Grafos..
Tema 5 Grafos. Implementación (I)..
Árboles binarios. Algoritmos básicos
Tema 1. Introducción a la programación (Lenguaje java).
Tratamiento de listas en Java
2.3 Cola de números enteros.
2.2 Pila de números enteros
1.2 Sintaxis del lenguaje Java.
Tema 4 Árboles. Árbol sobre matriz.
2.4 Construcción de un TAD a partir de otro.
ESTRUCTURAS DE DATOS AVANZADAS
/*Desarrollar una solución que permita ingresar y almacenar el promedio de prácticas, la nota del examen parcial y la nota del examen final de todos.

Solución de problemas por búsqueda inteligente

Programación II Colas Igor Santos Grueiro.
Oscar Bedoya. Edificio 331, 2º piso, E.I.S.C. Estructuras de datos y algoritmos.
Método en Java.
T RADUCTORES DDS CON CUP Práctica Optativa 12. CASO DE PRUEBA DDS CON CUP A continuación realizaremos una representación del árbol generado para la siguiente.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
Definición Estructura de datos jerárquica (no lineal) que puede representarse como un conjunto de nodos enlazados entre sí por medio de ramas. Formalmente,
Slide 7-1 Copyright © 2003 Pearson Education, Inc. Figure: Estructuras de datos.
ARBOLES PARCIALMENTE ORDENADOS ESTRUCTURAS DE DATOS.
Igor Santos Grueiro. De este tipo de pilas NO vamos a hablar.
Tema 6: Clases Antonio J. Sierra.
Teoría de Grafos.
Cecilia Laborde González
GRAFOS HUGO ARAYA CARRASCO.
1 Algoritmos Elementales de Grafos Agustín J. González ELO-320: Estructura de Datos Y Algoritmos 1er.Sem
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.
Trabajo presentado por: LUIS FERNANDO OBANDO ING
JAVA J.A.C..
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
Estructuras de control Introducción a la programación.
ARBOLES ESTRUCTURAS DE DATOS.
Control de flujo: Bucles
Manejo de Vectores y Matirces
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Estructura de Datos y Algoritmos
Capítulo 1 “Elementos de Programación”
Arboles M.C. José Andrés Vázquez FCC/BUAP

Definición, propiedades, recorridos x a q yb w e vu fo.
Agustín J. González ELO-320: Estructura de Datos y Algoritmos
Pilas y Colas Estructuras de Datos.
Estructuras de datos para Grafos
Grafos..
Agustín J. González ELO-320: Estructura de Datos Y Algoritmos
Trazas Animadas de Recorridos sobre Grafos
Estructuras de datos Fundamentos de análisis y diseño de algoritmos.
UNIDAD 2 Grafos Árboles abarcadores mínimos Caminos más cortos.
R ECORRIDO DE ÁRBOLES BINARIOS POR AMPLITUD O POR NIVELES Elaborado por: Luis Alberto Fonseca Esquivel Eduardo Acosta Casillas.
BUSQUEDA EN ANCHURA Y PROFUNDIDAD
int cantidad, horas, cuota; float precio, peso; cantidad = 5; // Le asigno un número a la variable Cantidad; horas = // Le asigno 30 a la variable.
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Caso.
Matemáticas Discretas MISTI
Ing. Esp. Ricardo Cujar. Permite la ejecución de una sentencia, dada una determinada condición. If(condición){ sentencia(s) a ejecutar en caso de que.
ArreglosBidimensionales enjava. Sonestructurasdetamañofijoorganizadasporfilasy columnas. Estas estructuras almacenan valores del MISMO TIPO de dato. Cada.
UNIVERSIDAD DIEGO PORTALES Facultad de Ingeniería Programación Avanzada TIPOS ABSTRACTOS DE DATOS TAD Tema: TIPOS ABSTRACTOS DE DATOS TAD Subtema: COLAS.
Transcripción de la presentación:

Tema 5 Grafos. Recorridos.

En profundidad En anchura Recorridos de Grafos En profundidad En anchura

Recorrido del Grafo Un grafo puede ser recorrido en profundidad o en amplitud. Aspectos que hay que considerar (comparado con el recorrido de árboles): Puesto que un árbol es un grafo orientado sin circuitos, al avanzar en el recorrido no cabe la posibilidad de que se vuelva a visitar un vértice ya visitado. En el recorrido de un grafo sí cabe la posibilidad de al avanzar visitar un vértice ya visitado. Partiendo de la raíz de un árbol se pueden visitar todos los vértices, mientras que en un grafo se puede dar la posibilidad de que no se alcancen todos los vértices desde un vértice. Habría que comenzar el recorrido en otro vértice para poder alcanzar todos los vértices.

Recorrido en profundidad (I) Preferencia a visitar a los vértices conectados con el último visitado. Recorrido en profundidad: Parte recursiva que recorre parcialmente un subgrafo a partir de un vértice de inicio Parte no recursiva que se encarga de relanzar el proceso en cada vértice no visitado. Vector de valores lógicos para marcar los vértices visitados. Se utilizan los índices de los vértices para iniciar y marcar el proceso de recorrido.

Recorrido en profundidad (II) 2 4 1 3 5 Se toma como vértice inicial 1, v1← visitado (el conjunto de vértices adyacentes a v1 es 2,3) Se toma vértice 2: v2 ← visitado (el conjunto de vértices adyacentes a v2 es 3,4) Se toma vértice 3 v3 ← visitado (el conjunto de vértices adyacentes a v3 es 1) //v1 ya está visitado por lo que se termina el recorrido en profundidad a partir de v3 Se toma el vértice 4 v4 ← visitado (el conjunto de vértices adyacentes a v4 es 3) //v3 ya está visitado por lo que se termina el recorrido en profundidad a partir del v4. No es posible alcanzar más vértices desde v1, de manera que hay que seleccionar un nuevo vértice desde el que recomenzar la exploración en profundidad. Se toma el vértice 5: v5 ← visitado (el conjunto de vértices adyacentes a v5 es 4) //v4 ya está visitado de manera que se termina el recorrido en profundidad a partir del vértice 5

Recorrido en profundidad (III) public void profundidad (Grafo g) { boolean visitados [ ] = new boolean [g.numVertices]; for (int I = 0; I < g.numVertices; i++) //inicializar vector: todos los campos a false visitados [i] = false; for (int I = 0; I < g.numVertices; i++) { //Relanzar el recorrido en cada vértice no visitado if (!visitados [i]) recorrerProfundidad (g, i, visitados); } public void recorrerProfundidad (Grafo g, int v, boolean [ ] visitados) { visitados [v] = true; //se marca el vértice v como visitado System.out.println (v); //se examinan los vértices adyacentes a v para continuar el recorrido for (int I = 0; I < g.numVertices; i++) { if ((v != i) && (!visitados [i]) && (g.existeArista (v, i)) ) recorrerProfundidad (g, i, visitados); }

Recorrido en amplitud Se elige un vértice no visitado v como punto de partida Se pasa a visitar cada uno de sus vértices adyacentes Se continúa visitando los adyacentes a estos últimos y así sucesivamente hasta que no se puedan alcanzar más vértices. Si queda algún vértice sin visitar, se selecciona y se vuelve a relanzar el proceso. Es necesario utilizar una estructura de datos cola: En la cola se van almacenando los vértices a medida que se llega a ellos. Los vértices se marcan en la cola como visitados Son tratados cuando se extraen de la cola al tiempo que se introducen en la cola los adyacentes al vértice tratado

public static void amplitud (Grafo g) throws ColaVacia { Cola cola = new TadCola ( ); boolean visitados [ ] = new boolean [g.obtenerNumVertices ()]; int v; //vértice actual for (int i = 0;i < g.obtenerNumVertices ();i ++) //Se inicializa el vector visitados[ ] a false visitados [i] = false; //El recorrido en amplitud se inicia en cada vértice no visitado for (int i = 0; i < g.obtenerNumVertices (); i++) { //se pone en la cola el vértice de partida y se marca como visitado if (!visitados [i]){ cola.encolar (i); visitados [i] = true; while (!cola.estaVacia ()) { //desencolar, solo mostrar por pantalla v = cola.desencolar (); System.out.println (v); //encolar los nodos adyacentes a v. for (int j = 0; j < g.obtenerNumVertices (); j ++){ if ((v != j) && (g.existeArista (v, j) && (!visitados [j])) { cola.encolar (j); visitados [j] = true; }