Guía de Trabajo Práctico (GRAFOS).doc

3
Guía de Trabajo Práctico Nº 6 GRAFOS ENUNCIADO DE EJERCICIOS (1) Desarrollar un algoritmo que permita recorrer un grafo en profundidad, procesando todos los vértices del mismo. (2) Desarrollar un algoritmo que permita recorrer un grafo en orden de amplitud, procesando todos los vértices del mismo. (3) Implementar el algoritmo de Dijkstra. (4) Implementar el algoritmo de Floyd. (5) Implementar el algoritmo de Prim. PROBLEMAS Los problemas planteados a continuación deben ser resueltos utilizando para ello las operaciones definidas del TAD Grafo. Para la evaluación y corrección de los algoritmos se tendrán en cuenta tres criterios: Eficacia o idea presentada para la resolución, eficiencia o corrección del algoritmo y utilización del TAD. (1) Generar un algoritmo que permita, dado un grafo G y un par de vértices v 1 y v 2 , verificar si el vértice v 1 es alcanzable desde el vértice v 2 . (2) Construir un algoritmo que permita determinar cual es el ganador en el juego del PacMan y el ComeLuces. El juego consiste en lo siguiente: El escenario del juego es un laberinto de caminos señalizados por luces donde en cada intersección de caminos hay una fruta con determinado puntaje asociado. El laberinto tiene una única entrada E y una única salida S. Se presupone que existen múltiples caminos que llevan de E a S. Se cuenta con un conjunto de 10 PacMan, los que irán ingresando de a uno y por turnos al laberinto. Solamente puede haber un PacMan en el laberinto en un momento determinado. Cuando un PacMan ingresa al laberinto es seguido de cerca por el ComeLuces, el que va devorando las luces de señalización del camino elegido por el PacMan. Un PacMan no puede elegir un camino por el que no haya luces.

Transcript of Guía de Trabajo Práctico (GRAFOS).doc

Page 1: Guía de Trabajo Práctico (GRAFOS).doc

Guía de Trabajo Práctico Nº 6

GRAFOS

ENUNCIADO DE EJERCICIOS

(1) Desarrollar un algoritmo que permita recorrer un grafo en profundidad, procesando todos los vértices del mismo.

(2) Desarrollar un algoritmo que permita recorrer un grafo en orden de amplitud, procesando todos los vértices del mismo.

(3) Implementar el algoritmo de Dijkstra.

(4) Implementar el algoritmo de Floyd.

(5) Implementar el algoritmo de Prim.

PROBLEMAS

Los problemas planteados a continuación deben ser resueltos utilizando para ello las operaciones definidas del TAD Grafo. Para la evaluación y corrección de los algoritmos se tendrán en cuenta tres criterios: Eficacia o idea presentada para la resolución, eficiencia o corrección del algoritmo y utilización del TAD.

(1) Generar un algoritmo que permita, dado un grafo G y un par de vértices v1

y v2, verificar si el vértice v1 es alcanzable desde el vértice v2.

(2) Construir un algoritmo que permita determinar cual es el ganador en el juego del PacMan y el ComeLuces. El juego consiste en lo siguiente:

El escenario del juego es un laberinto de caminos señalizados por luces donde en cada intersección de caminos hay una fruta con determinado puntaje asociado.

El laberinto tiene una única entrada E y una única salida S. Se presupone que existen múltiples caminos que llevan de E a S.

Se cuenta con un conjunto de 10 PacMan, los que irán ingresando de a uno y por turnos al laberinto. Solamente puede haber un PacMan en el laberinto en un momento determinado.

Cuando un PacMan ingresa al laberinto es seguido de cerca por el ComeLuces, el que va devorando las luces de señalización del camino elegido por el PacMan.

Un PacMan no puede elegir un camino por el que no haya luces. Cuando un PacMan llega a una intersección de caminos recoge la

fruta y su puntaje se acumula. El camino a seguir debe ser elegido aleatoriamente entre los caminos iluminados disponibles.

Cuando un PacMan se encuentra sin un caminos disponibles es alcanzado por el ComeLuces, quien lo devora. El puntaje asociado al PacMan pasa a ser cero.

Page 2: Guía de Trabajo Práctico (GRAFOS).doc

Si un PacMan encuentra la salida, acumula 100 puntos a los que ya había sumado.

Gana el juego el PacMan que haya hecho el mayor puntaje de todos los que encontraron la salida.

(3) Construir un algoritmo que permita, dada una red de computadoras, determinar si una cualquiera de ellas (B) es alcanzable desde otra cualquiera (A) utilizando para ello el algoritmo de ruteo en redes conocido como Hot Potatoe o de la Patata Caliente. Dicho algoritmo trabaja de la siguiente manera:

Ninguna máquina de la red tiene información acerca de la localización de cualquier otra máquina o ruta a cualquiera de ellas.

Cuando una computadora A desea enviar un paquete de datos a otra computadora B, elige al azar cualquier computadora vecina X y hacia ella envía el paquete, con la esperanza que X se encuentre en el camino hacia B.

Cada paquete tiene asociado un Tiempo de Vida (TTL) que tiene un valor de 10 al generarse el paquete. Cuando una computadora X recibe un paquete cualquiera decrementa el TTL. Si el mismo llega a 0 y X no es la computadora destino, el paquete es descartado y el algoritmo de ruteo fracasa.

El algoritmo tiene éxito cuando el paquete llega a la computadora de destino B con un TTL mayor o igual a 0.

Debe considerarse que en el ruteo no deben producirse ciclos, lo que significa que una vez que el paquete pasó por un enlace L determinado no puede volver a pasar por él. Sin embargo, se hace la salvedad, que un paquete puede pasar varias veces por la misma computadora.

Se pide que, dado 3 intentos, determinar si la computadora B es alcanzable desde la computadora A. Se debe desarrollar, además de la rutina que efectúa el ruteo en la red, aquella destinada a determinar la computadora vecina hacia la que se dirigirá un paquete y la rutina que permita inicializar la red antes de comenzar cada intento de ruteo. Cada intento debe efectuarse sobre la red original, esto significa que todos los enlaces son potenciales porciones de ruta para el paquete de prueba de alcanzabilidad.

(4) Un nodo ND en un grafo conectado es un punto de articulación si al suprimirlo, y por lo tanto suprimir todos sus arcos adyacentes, produce un grafo no conectado. Por lo tanto, la conectividad del grafo depende del nodo ND.Un grafo sin puntos de articulación se denomina biconectado.Escribir un programa que encuentre puntos de articulación si es que

existen.

(5) Un GRAFO DIRIGIDO DE PROBABILIDAD es aquel en el cual una función asocia una probabilidad con cada arco. La suma de las probabilidades de todos los arcos que emanan de cualquier nodo es 1 (uno). Considere un grafo dirigido de probabilidad acíclico que representa un sistema de túnel. Un hombre se coloca en un nodo del tunel. En cada nodo él elige tomar un arco en particular a otro nodo con la probabilidad que proporciona la función. Escriba un programa para calcular la probabilidad de que el hombre pase por todos los nodos del grafo.

Page 3: Guía de Trabajo Práctico (GRAFOS).doc

(6) Se cuenta con la siguiente información sobre una red eléctrica: Existen N conexiones en dicha red. Se cuenta con un conjunto de M pares ordenados (i,j) indicando que

desde la conexión i a la j hay un cable por donde fluye corriente, y qué cantidad de corriente.

Desarrollar un algoritmo que permita calcular la cantidad de corriente que fluye a través de dos cables aplicando la Ley de Kirchhoff. Esta ley establece que la cantidad de corriente que fluye en una conexión es igual a la cantidad de corriente que sale de una conexión.

(6) Dado un grafo dirigido, elabore un algoritmo que imprima, si existe, un camino hamiltoniano que arranque del vértice v. Un camino hamiltoniano es un camino que pasa exactamente una vez por cada uno de los vértices de un grafo.

(7) Un circuito de Euler en un grafo dirigido es un ciclo en el cual toda arista es visitada exactamente una vez. Escribir un programa que diga si un grafo tiene o no un círculo de Euler, y que escriba el camino a seguir para hacerlo.