ALGORITMOS Y ESTRUCTURAS DE DATOS II Ingeniería Técnica en Informática de Gestión Ingeniería Técnica en Informática de Sistemas CURSO 2003/04 Práctica 4 Diseño y construcción de un TAD basado en un grafo dirigido Objetivos § Definir e implementar las operaciones más características de los grafos dirigidos utilizando la representación de listas simples de adyacencia. Enunciado En un parque tecnológico, los edificios se encuentran conectados mediante raíles por los que circula un robot que se utiliza para enviar mensajería entre los distintos edificios. En la actualidad hay construidos 7 edificios (identificados por un número de orden) y algunas conexiones entre ellos, con la posibilidad de ampliar tanto los edificios como las conexiones, hasta un máximo de 10 edificios. Los analistas informáticos del parque consideran que la mejor forma de optimizar la circulación del robot es implementando un grafo dirigido del parque en el propio robot, donde cada vértice corresponde a los edificios, las aristas indican la conexión entre edificios y el peso indica la distancia entre ellos. Si entre dos edificios no existe arista significa que aún no se ha construido el raíl correspondiente. Para resolver el problema se creará el TAD TGRAFO basado en el tipo grafo dirigido. La representación del tipo PARQUE se basa en la representación mediante listas de adyacencias. TAD TParque El TAD TParque se implementa con la clase Parque, formada por los atributos: · numVertices (natural) · Grafo: tabla [1..10] de puntero a Nodo (reutilizar el TAD Nodo de la práctica 2, donde elemento es la clase verticeAdy) y con los métodos siguientes: constructor crearParque (nEdificios: natural; var resul: boolean); { crea un PARQUE con nEdificios. Debe comprobarse que este número es menor que el límite máximo de edificios permitidos } función parqueVacío: booleano; { indica si el parque self está o no vacío } función existeEdificio(E: natural): booleano; { Comprueba si existe el edificio E en el parque self } función existeRail(E1,E2: natural): booleano; { Comprueba si existe un raíl desde el edificio E1 hasta el edificio E2 en el grafo self } función nuevoRail(E1,E2: natural; D: natural): booleano; { Añade un nuevo raíl desde el edificio E1 hasta el edificio E2 con longitud D, entre los que no existía ningún raíl en el grafo self y devuelve cierto. Si ya existía el rail o no existe alguno de los edificios, no se crea el rail y la función devuelve falso } función eliminarRail(E1,E2: natural): booleano; { Elimina el raíl que va desde el edificio E1 hasta el edificio E2 en el grafo self, y devuelve verdadero si se elimina correctamente. Si no existe alguno de los edificios o no existe el rail, devuelve falso } procedimiento hastaDonde(E: natural); { Muestra por pantalla los edificios hasta los que se puede llegar desde el edificio E. Se puede utilizar el recorrido en anchura o profundidad. El formato de la visualización es libre. Se supone que el edificio E existe en el parque } procedimiento distanciaMinima(E: natural; var D: distancias); { Almacena en D las mínimas distancias necesarias para llegar a los edificios hasta los que se puede acceder desde el edificio E. El tipo distancias se deja a elección del alumno (lista, cola, tabla, etc.). Además de almacenar las distancias mínimas, la operación las debe mostrar por pantalla } TAD TVerticeAdy El TAD TVerticeAdy se implementa con la clase verticeAdy, formada por los atributos: · vértice (natural) · distancia (natural) y con los métodos siguientes: constructor crearVerticeAdy (EAdy: natural; dist: natural); función getAdyacente: natural; función getDistancia: natural; Se pide La evaluación de esta práctica consistirá en la entrega de la documentación de la especificación semiformal del TAD TParque, siguiendo las normas detalladas en la práctica 1. Notas sobre la práctica Los datos iniciales del parque se encuentran en un fichero llamado "parque.dat" que se puede obtener de la página de la asignatura. Los registros de este fichero tienen la siguiente estructura: registro_fichero = registro E1: natural; E2: natural; distancia: natural; fregistro donde E1 representa el edificio origen de una arista, E2 el edificio destino y el tercer campo la distancia entre los edificios E1 y E2. Tiempo estimado de realización 2 clases (se entregará en la semana del 26 al 29 de enero en la clase de prácticas)