Tarea 5 de Diseño de Algoritmos

Trimestre 2013 Otoño
Entrega: 30 de septiembre de 2013 a las 22:00.

Problema 1: Diseñe un algoritmo usando la técnica de búsqueda con retroceso para resolver el siguiente problema: Sea N un entero positivo y considere un tablero de ajedrez de N por N en el que se desean colocar reinas idénticas de forma tal que éstas ataquen todas las posiciones del tablero (no importa si las reinas se atacan entre sí o no). Su algoritmo deberá encontrar el mínimo número K de reinas que satisfacen esta condición y deberá calcular el número F de formas distintas se puede realizar. Observe que K <= N. Por ejemplo, si N = 2 entonces K = 1 y F = 4. Escriba un programa llamado ataca basado en su algoritmo que acepte como entrada el entero positivo N y que escriba como salida los números K y F en ese orden. De nuevo, si la entrada fuera 2 entonces la salida debe de ser 1 4. Puede suponer que 1 <= N <= 20.

Ejemplo de entrada
Ejemplo de salida
2 1 4

Problema 2: Diseñe un algoritmo usando la técnica de búsqueda con retroceso para resolver el siguiente problema: Dados tres enteros positivos N, A y B considere un tablero de ajedrez de N por N en el que hay un caballo en la posición (1, 1) que se quiere hacer llegar a la posición (N, N). Este caballo puede brincar A cuadros en cualquier dirección paralela a los lados del tablero y luego B cuadros en cualquier dirección perpendicular a la anterior (un caballo del juego de ajedrez normal tiene A = 2 y B = 1). Su algoritmo deberá encontrar el mínimo número P de pasos que se necesitan para lograr el objetivo. Observe que P <= N2. Por ejemplo, si N = 4, A = 1 y B = 2 entonces P = 2. Escriba un programa llamado acaba basado en su algoritmo que acepte como entrada tres enteros positivos N, A y B en ese orden y que escriba como salida el número P. De nuevo, si la entrada fuera 4 1 2 entonces la salida debe de ser 2. Puede suponer que 1 <= N <= 20, que 1 <= A <= N, que 1 <= B <= N y que el objetivo se puede lograr.

Ejemplo de entrada Ejemplo de salida
4 1 2
2

Notas: Tus programas no deben leer ni escribir nada adicional a lo que se indica en el enunciado. El tiempo de ejecución de sus algoritmos será considerado como parte de la evaluación.