Grafos - escuela de informática UTEM

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
Ejercicios del Tema 4
Grafos
Algoritmos sobre grafos
1. Escribe una función que devuelva cierto si un grafo es regular. Un grafo es regular si
todos sus vértices tienen el mismo número de vértices adyacentes.
2. Dado un grafo implementado mediante una matriz de adyacencia, escribe una función
predecesores(v: vértice): conjunto <vértice>. Se dice que w es predecesor del vértice v si
existe un arco que tenga por origen w y por destino a v, es decir, el arco (w,v)
pertenece al conjunto de arcos del grafo.
3. Dado un grafo dirigido y dos vértices, escribe una función que indique si existe un
camino entre dichos vértices
4. Escribe un algoritmo que dado un grafo dirigido y dos vértices de este grafo escriba
todos los caminos simples de un vértice a otro.
5. Escribe un algoritmo que visualice todos los ciclos de un grafo dirigido.
6. Dado un grafo implementado mediante listas simples de adyacencia, implementar dos
métodos que devuelvan, respectivamente, el grado de entrada y de salida de un vértice
v de dicho grafo.
7. Escribe un método que determine si un grafo implementado mediante una lista de
adyacencias es completo. Un grafo completo es aquel que tiene un arco entre cualquier
par de vértices. El que sigue es un ejemplo de grafo completo:
v1
v2
v3
Procesamiento de grafos
Recorridos – caminos mínimos – árbol de expansión mínimo
8. Dado el siguiente grafo:
B
G
A
F
D
H
C
E
Suponiendo que los sucesores de un nodo siempre se obtienen en orden alfabético,
se pide:
(a) Definir las estructuras adecuadas para representar en memoria el tipo Grafo
Dirigido mediante listas de adyacencia y listas múltiples de adyacencia. Representar
dicho grafo según las estructuras definidas.
(b) Realizar un seguimiento detallado de los recorridos en anchura y profundidad del
grafo anterior partiendo del nodo D, explicando qué nodos se van cogiendo en cada
paso y cómo se modifican las estructuras auxiliares que se necesitan para cada caso.
9. Dado el grafo siguiente:
B
D
G
A
C
J
E
V
P
Suponiendo que los sucesores de un nodo siempre se obtienen en orden alfabético,
se pide:
(a) Considerando la Lista de Adyancencia como estructura para representar en memoria
el tipo Grafo Dirigido, implementar en lenguaje algorítmico la acción Antecesores,
que devuelve en una lista los antecesores de un determinado vértice.
(b) Realizar un seguimiento detallado de los recorridos en anchura y profundidad del
grafo anterior partiendo del nodo D, explicando qué nodos se van cogiendo en cada
paso y cómo se modifican las estructuras auxiliares que se necesitan para cada caso.
10. Dado el siguiente grafo dirigido:
4
5
V2
V4
V3
1
1
3
1
2
V5
2
V8
V1
2
3
1
3
7
V7
V6
Se pide:
(a) Calcular, mediante el algoritmo de Dijkstra, el coste mínimo para alcanzar cualquier
vértice a partir del vértice V1.
(b) Suponiendo que se parte desde el vértice V1, realizar un seguimiento detallado del
recorrido en anchura, explicando qué nodos se van cogiendo en cada paso y cómo
van modificándose las estructuras auxiliares que se necesitan en cada recorrido.
NOTA: Los sucesores de un nodo siempre se obtienen en orden alfanumérico.
11. En una determinada carrera de orientación, el objetivo es llegar al último puesto de
control con la menor penalización posible. Supongamos que nuestra prueba posee 6
puestos de control, numerados del 1 al 6. La salida está situada en el puesto de control
número 1 y la meta en el número 6. Para llegar a la meta no es necesario pasar por
todos los puestos de control. La puntuación con la que se penaliza al deportista si
camina desde un determinado puesto hacia otro viene determinada por la siguiente
tabla:
1
2
3
4
5
6
1
2
20
3
75
2
4
60
30
40
3
100
5
6
25
200
20
25
El origen lo indica el eje vertical y el destino el eje horizontal, es decir, la
penalización por caminar desde el puesto 2 al 5 es de 25 puntos, y por caminar desde el
puesto 5 al 3, la penalización es de 40 puntos. La ausencia de puntos indica que no se
puede caminar directamente desde el puesto i al puesto j.
La organización desea saber quién va venciendo parcialmente en cada puesto.
Para saberlo se pide:
(a) Haciendo uso del algoritmo de Dijkstra, calcular cual es la puntuación mínima que
debe llevar un participante para vencer en cada puesto. Deberá realizarse un
seguimiento del desarrollo del algoritmo, para lo cual debe construirse una tabla
donde se observe la evolución del vector solución de distancias que devuelve el
algoritmo, así como el vértice seleecionado en cada paso.
(b) ¿Cuál es la puntuación con la que se vencería en la prueba?
(c) Para llevar un cierto control, cuando un participante llega a un puesto, se le pregunta
de qué puesto viene. Para saber si la respuesta es cierta, proponer una acción en la
que, dado un determinado puesto, devuelva desde qué puestos se puede llegar
directamente hacia él.
NOTA: suponemos que estamos implementando el grafo mediante una lista simple
de adyacencia
Descargar