Grafos - Informática UTEM
Grafos - Informática UTEM
Grafos - Informática UTEM
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