Está en la página 1de 2

UNIVERSIDAD EL BOSQUE

INGENIERIA DE SISTEMAS
COMPLEJIDAD ALGORÍTIMICA
PROYECTO FINAL

Diseñe los siguientes programas en el lenguaje de programación Java en el IDE


Eclipse (Únicamente), teniendo en cuenta los siguientes parámetros:
• Los programas deben ser desarrollados exclusivamente con la técnica
descrita al inicio.
• Los tres (3) programas deben ser integrados en un menú principal que
permita acceder a cada uno de ellos.
• Los programas deben ser flexibles (dinámicos). De ninguna manera se
aceptarán programas con datos “quemados en código”, o funcionando
exclusivamente para algunos casos particulares.
• Los programas podrán ser desarrollados por grupos de máximo tres (3)
personas y serán sustentados por una de ellas, escogida al azar.

1. Programación Dinámica

Un nutricionista va a un restaurante. En la carta aparecen todos los platos


disponibles con el número de calorías. El nutricionista conoce el número mínimo de
calorías que su cuerpo necesita en esa comida. Su objetivo es encontrar el menú
que cubra exactamente esa cantidad de calorías o las supere de forma mínima.
Además, no quiere repetir platos. Diseñe un algoritmo dinámico que determine qué
platos forman parte del menú óptimo y el número de calorías del menú óptimo.

2. Backtracking

En el solitario de mesa llamado Continental, treinta y dos piezas se colocan en un


tablero de treinta y tres casillas tal y como indica la siguiente figura, quedando vacía
únicamente la casilla central:

Una pieza sólo puede moverse saltando sobre una de sus vecinas y cayendo en
una posición vacía, al igual que en el juego de las damas, aunque aquí no están
permitidos los saltos en diagonal. La pieza sobre la que se salta se retira del tablero.
Docentes: Hernando Camargo & Helio Ramírez
UNIVERSIDAD EL BOSQUE
INGENIERIA DE SISTEMAS
COMPLEJIDAD ALGORÍTIMICA
PROYECTO FINAL

El problema consiste en diseñar un algoritmo que encuentre una serie de


movimientos (saltos) que, partiendo de la configuración inicial expuesta en la figura,
llegue a una situación en donde sólo quede una pieza en el tablero, que ha de estar
en la posición central.

El algoritmo deberá mostrar paso a paso cada movimiento de las piezas hasta llegar
a la solución buscada.

3. Rama y Poda

Un campo está dividido en m filas por n columnas. Los saltos de una liebre de una
casilla a otra de este campo se pueden ver como un primer movimiento de p casillas
en dirección horizontal o vertical, seguida de un segundo movimiento de q casillas
en dirección perpendicular a la seleccionada anteriormente. (Cuando se mueve
horizontalmente lo puede hacer hacia la izquierda o hacia la derecha y cuando se
mueve verticalmente lo puede hacer hacia arriba o hacia abajo).

Diseñar un algoritmo, de rama y poda, que ubicando a la liebre en una casilla (x,y),
determine la cantidad mínima de saltos que se necesitan para llegar a otra casilla
distinta (u,v) usando los saltos descritos anteriormente. Nota: El usuario puede
determinar las longitudes del campo, y las p y q casillas que describen el
movimiento.

Docentes: Hernando Camargo & Helio Ramírez

También podría gustarte