Prelaboratorio de la Semana 6

Anuncio
Universidad Simón Bolı́var
Departamento de Computación y Tecnologı́a de la Información
CI2693 - Laboratorio de Algoritmos y Estructuras III
Abril-Julio 2009
Prelaboratorio de la Semana 6
1.
Descripción de la actividad
El objetivo de este prelaboratorio es el de trabajar con la técnica de recorrido de grafos conocida como Búsqueda
en Produndidad (Depth First Search, DFS) y una aplicación de la misma como lo es la determinación las componentes
biconexas y puntos de articulación de un grafo.
1.1.
Búsqueda en Profundidad
Se requiere que implemente el algoritmo de Búsqueda en Produndidad en su versión recursiva. Dado un grafo
dirigido o no dirigido G = (V, E) sin arcos múltiples y un vértice s ∈ V , se debe obtener la lista de caminos o
cadenas que parten de s a cada uno de los vértices alcanzables desde s.
Se debe usar como representación del TDA Grafo la codificada en el Proyecto 1. Como el TDA Grafo permite
la inclusión de lados múltiple, para poder aplicar el algoritmo DFS es necesario un nuevo grafo sin lados múltiples
asociado al grafo original. Este nuevo grafo puede ser creado siguiendo los siguientes pasos:
Por cada lado li = (a, b) de multiciplidad i > 1, se asocian i vértices ficticios fi , i lados efi y i lados lfi .
Cada lado li = (a, b) es sustituido por un camino o cadena de la forma < a, efi , fi , lfi , b >.
En la figura 1 se muestra un ejemplo de la transformación de un conjunto de lados múltiples de un grafo no
dirigido.
Figura 1: Grafo G con lados múltiples y su transformación en grafo simple
Una vez obtenido las cadenas o caminos al aplicar DFS estos se deberán convertir en caminos o cadenas que son
válidos en el grafo original.
Debe programar un cliente llamado ClienteDFS.java. Este cliente recibirá como entrada el vértice s desde donde
se iniciará el recorrido del grafo y un archivo que contendrá la data de un grafo, con el formato del Proyecto 1. Se
quiere obtener, por la salida estándar, todos los caminos o cadenas que inician desde un vértice s hasta todos los
vértices que son alcanzables desde s. Un ejemplo de una llamada al programa que comienza desde el vértice a y con
la data del grafo en el archivo g.txt serı́a:
>jmlrac ClienteDFS a g.txt
Los caminos o cadenas que se obtiene de aplicar DFS a un grafo G = (V, E) desde un vértice s, deben ser
presentados como una secuencia de vértices vi ∈ V y lados ei ∈ E, con el siguiente formato: [s, < e1 , v1 , >, <
e2 , v2 >, . . . , < en , vn >]
0
1.2.
Componentes biconexas y puntos de articulación
La segunda actividad que debe realizar en este prelaboratorio es la implementación de un algoritmo que dado un
grafo G simple y no dirigido, obtenga el un conjunto de vértices que son puntos de articulación de G y el conjunto
de aristas de cada componente biconexa de G. En la sección IV.2.6.3 del libro Grafos y algoritmos [1] se encuentra
la descripción del algoritmo que determina las componentes biconexas y puntos de articulación de un grafo.
Debe codificar un cliente llamado Biconexa.java, que recibirá como entrada un archivo que contendrá la data de
un grafo, con el formato del Proyecto 1
2.
Condiciones de entrega
El dı́a martes 26 de mayo del 2009 debe enviar antes de las 1:30 pm un email al encargado de su sección, que
tenga como adjunto un archivo del tipo tar.gz que contenga todos los archivos fuentes de su prelaboratorio.
Referencias
[1] O. Meza and O. Maruja. Grafos y Algoritmos. Editorial Equinoccio, 2006.
1
Descargar