Sunteți pe pagina 1din 2

1.

Utilizando la técnica de backtracking escriba un algoritmo que muestre el recorrido del rey en un tablero
de ajedrez. Su algoritmo debe recibir, entre otros datos, la posición en la cual se inicia el recorrido.
Recuerde que cada posición del tablero se visita sólo una vez.

2. Usando la técnica divide y vencerás, construya algoritmo en el cual dado un vector con datos numéricos
ordenados ascendentemente determine la posición en la cual el subíndice coincida con el dato. Por
ejemplo, dado el vector

1 2 3 4 5 6 7 8 9 10 11 12
V -8 -5 -1 2 4 5 7 10 13 15 22 39

La respuesta es 7, ya que V[7] == 7. En caso de no existir un dato con esa característica su algoritmo debe
retornar 0.

3. Elabore algoritmo, usando la técnica de backtracking, que muestre todas las posibles formas de
completar una devuelta D, conociendo las n denominaciones que se utilizan para devolver y considerando
que hay infinitas monedas de cada denominación.

4. Usando la técnica divide y vencerás, construya algoritmo con orden de magnitud logarítmico para
calcular xn, siendo x y n parámetros del subprograma.

5. Elabore algoritmo que muestre todas las diferentes formas óptimas de cargar una mochila de capacidad
C con n objetos cada uno de los cuales tiene un peso pi y un beneficio bi. Utilice la técnica de
programación con retroceso (backtracking). Por ejemplo, si tenemos una mochila con capacidad 9 Kg y 5
objetos con los siguientes pesos y beneficios

1 2 3 4 5 1 2 3 4 5
peso 3 1 6 2 8 beneficio 2 7 5 4 9

Las mejores dos formas de cargar la mochila son:


1. Introduciendo los objetos 2, 3 y 4
2. Introduciendo los objetos 2 y 5

6. Se tiene un vector con n datos numéricos ordenados ascendentemente. Elabore algoritmo con orden de
magnitud semilogarítmico, utilizando la técnica divide y vencerás, que determine si existe una pareja de
números tal que su suma sea igual a un dato D entrado como parámetro.

7. Utilizando programación ávida, elabore algoritmo que determine y muestre el mínimo número de
monedas necesarias para completar una devuelta, considerando que existe un número finito de monedas
de cada denominación.

8. Elabore algoritmo que determine y muestre el mínimo número de monedas necesarias para completar
una devuelta. Tenga en cuenta que las monedas no están ordenadas por denominación. Utilice la técnica
de programación con retroceso (backtracking). En caso de que haya más de una solución óptima debe
mostrar todas las óptimas.

9. Dado un conjunto de n enteros, necesitamos decidir si puede ser descompuesto en dos subconjuntos
disjuntos cuyos elementos sumen la misma cantidad. Elabore programa de computador, utilizando la
técnica backtracking, que retorne verdadero si se puede efectuar dicha descomposición o falso de lo
contrario.

10. Se dice que un número primo es circular si todas las rotaciones de sus dígitos son también números
primos. Por ejemplo el 179 es primo circular porque 791 y 917 son también primos; el 19937 es primo
circular porque 99371, 93719, 37199 y 71993 son también primos. Construya un algoritmo que utilice la
técnica de programación dinámica para determinar y mostrar todos los números primos circulares menores
que 100000.

11. Se tiene un conjunto con n números enteros. Usando la técnica de backtracking (programación con
retroceso) elabore algoritmo que muestre todas las posibles particiones de dicho conjunto, tal que la suma
de los datos que estén en ambas particiones sean iguales. Defina claramente variables globales (si es que
utiliza variables globales)
Por ejemplo, si el conjunto de n datos es {2, 3, 5, 9, 4, 6, 7} algunas de las posibles soluciones son:

P1 = {2, 7, 4, 5}, P2 = {3, 6, 9}


P1 = {3, 5, 4, 6}, P2 = {2, 7, 9}
P1 = {2, 3, 4, 9}, P2 = {5, 6, 7}

12. Utilizando la técnica de backtracking elabore algoritmo que muestre todas las posibles combinaciones
de ceros y unos de una hilera de longitud n (n es conocido). Por ejemplo, si n es 3 todas las posibles
combinaciones son: 000, 001, 010, 011, 100, 101, 110, 111.

13. Utilizando la técnica de backtracking elabore algoritmo que resuelva un sudoku. Considere que tiene
disponibles dos subprogramas: uno llamado “esFactible(i, j, k)” el cual controla que si coloco el número k
en la fila i, columna j, cumple la condición de que no se halla ni en la fila i, ni en la columna j ni en la
subregión correspondiente a esa fila y columna; y otro llamado “verificaTerminacion()”, el cual controla que
todas las casillas del sudoku se han llenado correctamente.

S-ar putea să vă placă și