7
Backtracking Erick García El backtracking es un algoritmo de para encontrar todas, o algunas soluciones para algunos problemas computacionales, siendo estos problemas que deben satisfacer ciertas restricciones, El termino backtrack fue usado por primera vez por un matemático norte americano D.H Lehmer en la década de los 50. La técnica consiste de constantemente ir creando candidatos para las soluciones e ir abandonado cada candidato parcial o incompleto así que es determinado que dicha respuesta no puede ser finalizada como una solución válida. Se puede comparar con el recorrer un diagrama de árbol hasta llegar a un valor base que nos permita así retroceder y resolver los otros candidatos a solución. El ejemplo más clásico para esta técnica seria el problema de las 8 reinas el cual consiste en poner 8 reinas en un tablero de ajedrez sin que ninguna de ellas se amenace este problema fue propuesto por un ajedrecista alemán llamado Max Bezzel. Para resolver este problema se debe tener claro que en el juego del ajedrez la reina amenaza a cualquier pieza que se encuentra en su misma fila, columna o diagonal. A seguir se encuentra un ejemplo de solución al programa utilizando malloc y recursividad por backtracking: #include <stdio.h> #include <stdlib.h> int Queen=0; void Queens(int i,int *vector,int *Position,int *AuxDiag2,int *AuxDiag1){ int z; for (z=0;z<8;z++){ if (Position[z] && AuxDiag2[i+z] && AuxDiag1[i-z+7]){ vector[i] = z; Position[z] = 0; AuxDiag2[i+z] = 0; AuxDiag1[i-z+7] = 0; Queen++; if (i<7){ Queens (i+1, vector, Position, AuxDiag2, AuxDiag1); if (Queen<8){ Position[z] = 1; AuxDiag2 [i+z] = 1; AuxDiag1 [i-z+7] = 1; Queen--; } } } } }

Backtracking HomeWork

Embed Size (px)

DESCRIPTION

A simple explanation of Backtraking and Divide and Conquer Method of Recusive progamming i hope i can help you guys out.

Citation preview

BacktrackingErick GarcaEl backtracking es un algoritmo de para encontrar todas, o algunas soluciones para algunos problemas computacionales, siendo estos problemas que deben satisfacer ciertas restricciones, El termino backtrack fue usado por primera vez por un matemtico norte americano D.H Lehmer en la dcada de los 50. La tcnica consiste de constantemente ir creando candidatos para las soluciones e ir abandonado cada candidato parcial o incompleto as que es determinado que dicha respuesta no puede ser finalizada como una solucin vlida. Se puede comparar con el recorrer un diagrama de rbol hasta llegar a un valor base que nos permita as retroceder y resolver los otros candidatos a solucin.El ejemplo ms clsico para esta tcnica seria el problema de las 8 reinas el cual consiste en poner 8 reinas en un tablero de ajedrez sin que ninguna de ellas se amenace este problema fue propuesto por un ajedrecista alemn llamado Max Bezzel. Para resolver este problema se debe tener claro que en el juego del ajedrez la reina amenaza a cualquier pieza que se encuentra en su misma fila, columna o diagonal.A seguir se encuentra un ejemplo de solucin al programa utilizando malloc y recursividad por backtracking:#include #include

int Queen=0;void Queens(int i,int *vector,int *Position,int *AuxDiag2,int *AuxDiag1){ int z; for (z=0;z