Tarea 3

Anuncio
Universidad Simón Bolı́var
Departamento de Computación y Tecnologı́a de la Información
CI-2693 Laboratorio de Algoritmos III - Sección 2
Trimestre Septiembre-Diciembre de 2008
Tarea 3: Recorrido de Grafos
1.
Introducción
El objetivo de la tarea es el de trabajar con la técnica de recorrido de grafos, llamada Búsqueda
en Amplitud (Breadth-First Search). Se le proporcionará en la página web del curso de un código base
el cual usted puede decidir usar o no. En el código base el archivo BFSSearch.java es el cliente de la
aplicación. Se requiere que su aplicación sea capaz de llevar a cabo 2 actividades. Se recomienda la lectura
del capı́tulo 18 Graph Search, especı́ficamente desde la sección 18,1 hasta la 18,4 del libro Algorithms in
Java [2]. Asimismo se tiene que el libro Grafos y Algoritmos [1], en el Capı́tulo IV Recorrido en grafos
también puede servir como referencia.
2.
Actividad 1: Búsqueda en Amplitud
Se debe recorrer un grafo usando el algoritmo de Búsqueda en Amplitud. Para ello debe implementar
en JAVA el siguiente operador:
BFS : Grafo × id Vértice inicial × arreglo de enteros × arreglo de enteros → Nada
Se tiene que la semántica del operador es la siguiente: BFS(G, id, orden[], pred[]) hace un recorrido
usando la técnica Búsqueda en amplitud en el grafo G. El argumento id es un número entero que
representa el identificador del vértice desde comienza el recorrido. Se quiere obtener de la Búsqueda en
amplitud dos arreglos. El primero es orden[] que debe contener la posición u orden en que es visitado
todos los vértice durante el recorrido. El segundo es pred[] que almacena los predecesores de cada uno de
los vértices de la arborescencia que se obtiene del recorrido del grafo. Debido a que los resultados de la
Búsqueda en amplitud dependen del orden en que se visitan los vértices, para obtener siempre un mismo
resultado, sin importar el orden en que se cargen los datos, se tendrá que el grafo en su aplicación debe
tener los vértices que componen cada una de las listas de adyacencias del grafo, ordenados de manera
descendente.
3.
Actividad 2: Búsqueda de caminos
Se desea que modifique el algoritmo de Búsqueda en amplitud, para determinar un camino entre un
par de vértices. La idea es que dado un vértice inicial y un vértice final, se comience una Búsqueda en
amplitud desde el vértice inicial y una vez alcanzado el vértice final se detiene el algortimo para luego
imprimir el camino obtenido. En caso de recorrer todos los vértices que son alcanzables desde el vértice
inicial y no haber visitado al vértice final, entonces se declara que no hay un camino entre los pares de
vértices.
Para llevar a cabo esta actividad se debe implementar el siguiente operador:
obtenerCaminoBFS : Grafo × id Vértice Inicial × id Vértice Final → Lista de Vértices
Se tiene que obtenerCaminoBFS(G, idVi , idVf ), recibe un grafo G, un vértice inicial idVi de donde
comienza el recorrido y el vértice final idVf , el cual es el vértice meta del camino a buscar. Se retorna
una lista de vértices que componen el camino
4.
Especificación de la Entrada/Salida
4.1.
Entrada
La sipnosis de la entrada del programa principal es:
1
>java BFSSearch <actividad> <vi> [<vf>] <archivo>
Donde:
actividad número de la actividad a resolver, 1 para la actividad 1 y 2 para al actividad 2
vi es el identificador del vértice de partida del recorrido
vf es el identificador del vértice de meta del recorrido. Sólo válido para la actividad 2
archivo es el nombre del archivo donde se define el grafo con el formato con el formato utilizado en
los laboratorios anteriores
4.2.
Salida
Para la actividad 1 se debe imprimir el orden en el que son visitados los vértices en la búsqueda y
cual es el vértice predecesor de cada uno de los vértices durante el recorrido. La salida de la actividad 2
muestra el camino entre el vértice inicial y el final si este existe. De lo contrario indica que no hay camino.
4.3.
Ejemplo
Suponga que se tiene un archivo con la data de un grafo, llamado g.txt, con el siguiente contenido:
n
13
13
0 1
0 6
0 2
0 5
5 4
5 3
3 4
4 6
7 8
9 12
9 10
9 11
11 12
4.3.1.
Ejecución de la actividad 1
>java BFSSearch 1 0 g.txt
4.3.2.
Salida de la actividad 1
Vertice - Orden
--------------0 0
1 4
2 3
3 6
4 5
5 2
6 1
7 7
8 8
9 9
10 12
11 11
2
12 10
Vertice - Predecesor
--------------------0 0
1 0
2 0
3 5
4 6
5 0
6 0
7 7
8 7
9 9
10 9
11 9
12 9
4.3.3.
Ejecución de la actividad 2
>java BFSSearch 2 0 4 g.txt
4.3.4.
Salida de la actividad 2
>Camino encontrado: 0 6 4
4.3.5.
Otra ejecución de la actividad 2
>java BFSSearch 2 0 12 g.txt
4.3.6.
Otra salida de la actividad 2
>No existe camino entre los vertices 0 12
5.
Condiciones de la entrega
Para el jueves de la semana 6, debe entregar en un CD-ROM, debidamente identificado con los fuentes
de su solución. Ese mismo dı́a se le pedirá que modifique y/o agregue una funcionalidad al programa a
entregar. La actividad en el laboratorio será evaluada.
Referencias
[1] M. Ortega and O. Meza. Grafos y Algoritmos. Equinoccio, 2006.
[2] R. Sedgewick. Algorithms in Java. Addison-Wesley Professional, 2003.
3
Descargar