Documente Academic
Documente Profesional
Documente Cultură
Metoda backtracking
ovidiu.banias@aut.upt.ro
Utiliatate. Exemplificare
Backtracking. Introducere
xi / i = 1, n pot fi şi vectori
( not )
n = 4, A = Ai / i = 1, n ⇒ S v = x1 x2 x3 x4 / x j ∈ {1..4}, j = 1,4
v: 3 1 2 4
index : 1 2 3 4
v: ⇒ v: 1
k: 1 2 3 4 k: 1 2 3 4
Backtracking. Permutări.
v: 1 1 ⇒ v: 1 2
k: 1 2 3 4 k: 1 2 3 4
v: 1 2 1 ⇒ v: 1 2 2
k: 1 2 3 4 k: 1 2 3 4
v: 1 2 3 ⇒ v: 1 2 3 1
k: 1 2 3 4 k: 1 2 3 4
Backtracking. Permutări.
v: 1 2 3 2 ⇒ v: 1 2 3 3
k: 1 2 3 4 k: 1 2 3 4
SOL
v: 1 2 3 4 ⇒ v: 1 2 4
k: 1 2 3 4 k: 1 2 3 4
SOL
v: 1 2 4 1 ⇒ ... ⇒ v: 1 2 4 3
k: 1 2 3 4 k: 1 2 3 4
Backtracking. Permutări.
v: 1 2 4 4 ⇒ v: 1 3
k: 1 2 3 4 k: 1 2 3 4
v: 1 3 1 ⇒ v: 1 3 2
k: 1 2 3 4 k: 1 2 3 4
SOL
v: 1 3 2 1 ⇒ ... ⇒ v: 1 3 2 4
k: 1 2 3 4 k: 1 2 3 4
Backtracking. Permutări.
Pas 3: Se aleg soluţiile dintre candidaţi. Condiţia este ca toate
elementele vectorului să fie completate şi diferite între ele.
v: 4 3 4 ⇒ v: 4 4
k: 1 2 3 4 k: 1 2 3 4
v: 4 ⇒ v:
k: 1 2 3 4 k: 1 2 3 4
Backtracking. Preambul implementare
Pentru generarea tuturor soluţiilor se foloseşte o structură de date de tip
stivă, v. Vârful stivei se notează cu k
dacă elementul din vârful stivei este valid, putem avea un cantidat la soluţie
Funcția Init
Funcția Succesor
Funcția Valid
int Valid(k){
int Solution(k){
Verifică condiţia impusă de problemă ca
return (k==n);
valorile actuale din stivă (candidatul la
}
soluţie) să reprezinte o soluţie, în cazul
de faţă : să fie completate n elemente
void Print(){
din stivă
printf("%d : ",++m);
Rutina standard
k=1; Init(k);
Permutări
Aranjamente
Combinări
Problema reginelor