11.06.2013 Views

Grafos - Informática UTEM

Grafos - Informática UTEM

Grafos - Informática UTEM

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

ALGORITMOS Y ESTRUCTURAS DE DATOS II<br />

Ingeniería Técnica en <strong>Informática</strong> de Gestión<br />

Ingeniería Técnica en <strong>Informática</strong> de Sistemas<br />

Ejercicios del Tema 4<br />

<strong>Grafos</strong>


Algoritmos sobre grafos<br />

1. Escribe una función que devuelva cierto si un grafo es regular. Un grafo es regular si<br />

todos sus vértices tienen el mismo número de vértices adyacentes.<br />

2. Dado un grafo implementado mediante una matriz de adyacencia, escribe una función<br />

predecesores(v: vértice): conjunto . Se dice que w es predecesor del vértice v si<br />

existe un arco que tenga por origen w y por destino a v, es decir, el arco (w,v)<br />

pertenece al conjunto de arcos del grafo.<br />

3. Dado un grafo dirigido y dos vértices, escribe una función que indique si existe un<br />

camino entre dichos vértices<br />

4. Escribe un algoritmo que dado un grafo dirigido y dos vértices de este grafo escriba<br />

todos los caminos simples de un vértice a otro.<br />

5. Escribe un algoritmo que visualice todos los ciclos de un grafo dirigido.<br />

6. Dado un grafo implementado mediante listas simples de adyacencia, implementar dos<br />

métodos que devuelvan, respectivamente, el grado de entrada y de salida de un vértice<br />

v de dicho grafo.<br />

7. Escribe un método que determine si un grafo implementado mediante una lista de<br />

adyacencias es completo. Un grafo completo es aquel que tiene un arco entre cualquier<br />

par de vértices. El que sigue es un ejemplo de grafo completo:<br />

v 2<br />

v 1<br />

v 3


Procesamiento de grafos<br />

Recorridos – caminos mínimos – árbol de expansión mínimo<br />

8. Dado el siguiente grafo:<br />

C<br />

Suponiendo que los sucesores de un nodo siempre se obtienen en orden alfabético,<br />

se pide:<br />

(a) Definir las estructuras adecuadas para representar en memoria el tipo Grafo<br />

Dirigido mediante listas de adyacencia y listas múltiples de adyacencia. Representar<br />

dicho grafo según las estructuras definidas.<br />

(b) Realizar un seguimiento detallado de los recorridos en anchura y profundidad del<br />

grafo anterior partiendo del nodo D, explicando qué nodos se van cogiendo en cada<br />

paso y cómo se modifican las estructuras auxiliares que se necesitan para cada caso.<br />

9. Dado el grafo siguiente:<br />

V<br />

A<br />

A<br />

D<br />

J<br />

B<br />

E<br />

B<br />

P<br />

Suponiendo que los sucesores de un nodo siempre se obtienen en orden alfabético,<br />

se pide:<br />

(a) Considerando la Lista de Adyancencia como estructura para representar en memoria<br />

el tipo Grafo Dirigido, implementar en lenguaje algorítmico la acción Antecesores,<br />

que devuelve en una lista los antecesores de un determinado vértice.<br />

(b) Realizar un seguimiento detallado de los recorridos en anchura y profundidad del<br />

grafo anterior partiendo del nodo D, explicando qué nodos se van cogiendo en cada<br />

paso y cómo se modifican las estructuras auxiliares que se necesitan para cada caso.<br />

F<br />

D<br />

C<br />

G<br />

H<br />

G<br />

E


10. Dado el siguiente grafo dirigido:<br />

Se pide:<br />

2<br />

V2<br />

V1<br />

3<br />

3<br />

5<br />

1<br />

V7<br />

V8<br />

1<br />

V3<br />

(a) Calcular, mediante el algoritmo de Dijkstra, el coste mínimo para alcanzar cualquier<br />

vértice a partir del vértice V1.<br />

(b) Suponiendo que se parte desde el vértice V1, realizar un seguimiento detallado del<br />

recorrido en anchura, explicando qué nodos se van cogiendo en cada paso y cómo<br />

van modificándose las estructuras auxiliares que se necesitan en cada recorrido.<br />

NOTA: Los sucesores de un nodo siempre se obtienen en orden alfanumérico.<br />

11. En una determinada carrera de orientación, el objetivo es llegar al último puesto de<br />

control con la menor penalización posible. Supongamos que nuestra prueba posee 6<br />

puestos de control, numerados del 1 al 6. La salida está situada en el puesto de control<br />

número 1 y la meta en el número 6. Para llegar a la meta no es necesario pasar por<br />

todos los puestos de control. La puntuación con la que se penaliza al deportista si<br />

camina desde un determinado puesto hacia otro viene determinada por la siguiente<br />

tabla:<br />

2<br />

3<br />

4<br />

1<br />

7<br />

V4<br />

1<br />

V5<br />

1 2 3 4 5 6<br />

1 20 75 60<br />

2 2 30 25<br />

3 100 200<br />

4 20<br />

5 40 3 25<br />

6<br />

El origen lo indica el eje vertical y el destino el eje horizontal, es decir, la<br />

penalización por caminar desde el puesto 2 al 5 es de 25 puntos, y por caminar desde el<br />

puesto 5 al 3, la penalización es de 40 puntos. La ausencia de puntos indica que no se<br />

puede caminar directamente desde el puesto i al puesto j.<br />

2<br />

V6


La organización desea saber quién va venciendo parcialmente en cada puesto.<br />

Para saberlo se pide:<br />

(a) Haciendo uso del algoritmo de Dijkstra, calcular cual es la puntuación mínima que<br />

debe llevar un participante para vencer en cada puesto. Deberá realizarse un<br />

seguimiento del desarrollo del algoritmo, para lo cual debe construirse una tabla<br />

donde se observe la evolución del vector solución de distancias que devuelve el<br />

algoritmo, así como el vértice seleecionado en cada paso.<br />

(b) ¿Cuál es la puntuación con la que se vencería en la prueba?<br />

(c) Para llevar un cierto control, cuando un participante llega a un puesto, se le pregunta<br />

de qué puesto viene. Para saber si la respuesta es cierta, proponer una acción en la<br />

que, dado un determinado puesto, devuelva desde qué puestos se puede llegar<br />

directamente hacia él.<br />

NOTA: suponemos que estamos implementando el grafo mediante una lista simple<br />

de adyacencia

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!