Tarea 3 de Diseño de Algoritmos

Trimestre 2012 Invierno
Entrega: 20 de febrero de 2012 a las 22:00.

Problema 1: Diseña un algoritmo usando la técnica de búsqueda con retroceso para resolver el siguiente problema: se tiene un tablero de ajedrez de N por N en el cual hay un caballo flojo en el renglón R y la columna C que está obligado a saltar a cuadros que no ha visitado. Como el caballo es flojo, la idea es buscar un recorrido en el cual se atore en tan pocos saltos como sea posible. Escribe un programa llamado flojoZZ (donde ZZ es una clave de dos dígitos asignada por el profesor) basado en tu algoritmo que acepte como entrada un entero positivo N (con 1 <= N <= 20) y la posición inicial (R, C) del caballo (con 1 <= R, C <= N) y que escriba como salida el recorrido buscado del caballo. En la salida el tablero se describe por una matriz de N por N donde las posiciones sucesivas del caballo se numeran como 1, 2, ..., N2 y las posiciones no visitadas se indican con un 0. En el ejemplo mostrado (que no necesariamente es el mejor) el caballo visita 9 cuadros y allí se queda atorado, pues los dos saltos posibles ya han sido visitados antes (el 6 y el 8).

Ejemplo de entrada
Ejemplo de salida
4 2 2
7 4 0 2
0 1 6 0
5 8 3 0
0 0 0 9

Problema 2: Diseña un algoritmo usando la técnica de búsqueda con retroceso para resolver el siguiente problema: se tiene un tablero de ajedrez de N por N en el cual hay un caballo supersticioso en el renglón R y la columna C que tiene un número M de mala suerte. Como el caballo es supersticioso, la idea es buscar un recorrido en el cual visite (sin repetir ninguno) tantos cuadros del tablero como pueda, excepto aquellos cuyas coordenadas (X, Y) sumen un múltiplo de M. Escribe un programa llamado malasZZ (donde ZZ es una clave de dos dígitos asignada por el profesor) basado en tu algoritmo que acepte como entrada un entero positivo N (con 1 <= N <= 20), la posición inicial (R, C) del caballo (con 1 <= R, C <= N) y el número M (con 2 <= M <= 2N) y que escriba como salida el recorrido buscado del caballo. Puedes suponer que R+C no es divisible entre M. En la salida el tablero se describe por una matriz de N por N donde las posiciones sucesivas del caballo se numeran como 1, 2, ..., N2 y las posiciones no visitadas se indican con un 0. En el ejemplo mostrado (que no necesariamente es el mejor) el caballo visita 8 cuadros y allí ya no puede avanzar más, puesto que los dos saltos posibles lo llevan a un cuadro ya visitado (el 7) o a un cuadro de mala suerte (3+3 = 6, un múltiplo de M).

Ejemplos de entrada
Ejemplos de salida
4 1 3 3
0 0 1 0
0 7 4 0
5 2 0 0
8 0 6 3

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.