Está en la página 1de 4

Backtracking (algoritmos de bsqueda con retroceso o algoritmos de vuelta atrs) Esquema general: algoritmo ensaya principio inicializar seleccin

de candidatos; repetir seleccionar siguiente; si aceptable entonces registrarlo; si solucin incompleta entonces ensaya; si no exitoso entonces cancelar registro fsi fsi fsi hastQue exitosa or no ms candidatos fin

Esquema con parmetro explcito de nivel (i), n de niveles conocido (n) y n fijo de candidatos por investigar (m): algoritmo ensaya(ent i:entero) variable k:entero principio k:=0; repetir k:=k+1; seleccionar k-simo candidato; si aceptable entonces registrarlo; si i<n entonces ensaya(i+1); si no exitoso entonces cancelar registro fsi fsi fsi hastaQue exitoso or (k=m) fin

Lo mismo, para el clculo de TODAS las soluciones:


algoritmo ensaya(ent i:entero) variable k:entero principio para k:=1 hasta m hacer seleccionar k-simo candidato; si aceptable entonces registrarlo; si i<n entonces ensaya(i+1) sino escribir solucin fsi; cancelar registro fsi fpara fin

Ejemplo: problema de las ocho reinas


algoritmo reinas variables i:entero; q:bool; a:vector[1..8] de bool; b:vector[2..16] de bool; c:vector[-7..7] de bool; x:vector[1..8] de entero

{a[i]=niguna reina en fila i} {b[i]=ninguna reina en diagonal-/ i} {c[i]=ninguna reina en diagonal-\ i} {x[i]=posicin de la reina en la i-sima columna}

algoritmo ensaya(ent i:entero; sal q:booleano) variable j:entero principio j:=0; repetir j:=j+1; q:=falso; si a[j] and b[i+j] and c[i-j] entonces x[i]:=j; a[j]:=falso; b[i+j]:=falso; 1 2 3 4 5 6 7 8 =i 1 c[i-j]:=falso; si i<8 entonces 2 i+j=cte. (2..16) 3 ensaya(i+1,q); 4 si not q entonces 5 a[j]:=verdad; 6 b[i+j]:=verdad; 7 c[i-j]:=verdad 8 fsi i-j=cte. (-7..7) sino j q:=verdad fsi fsi hastaQue q or (j=8) fin principio para i:=1 hasta 8 hacer a[i]:=verdad fpara; para i:=2 hasta 16 hacer b[i]:=verdad fpara; para i:=-7 hasta 7 hacer c[i]:=verdad fpara; ensaya(1,q); para i:=1 hasta 8 hacer escribir(x[i]) fpara fin Solucin: 1 5 8 6 3 7 2 4

También podría gustarte