Práctica 4 Diseño y construcción de un TAD basado en un grafo

Anuncio
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)
Descargar