Está en la página 1de 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


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.
 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.

(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.

También podría gustarte