|
T E H N I C A B A C K T R A C K I N G
Ana VLAD
Ruxandra IONESCU
PREZENTAREA TEHNICII BACKTRACKING:
Aceasta tehnica se foloseste in rezolvarea problemelor care indeplinesc
simultan urmatoarele conditii:
. Solutia lor poate fi pusa sub forma unui vector S=x1x2,........,xn cu x1(
A1, x2 ( A2, ........, xn ( An ;
. Multimile A1, A2, ........, An sunt multimi finite, iar elementele lor se
considera ca se afla intr-o relatie de ordine bine stabilita;
. Nu se dispune de o alta metoda de rezolvare, mai rapida;
Aceasta tehnica presupune trei functii:
1. Functia de citire a valorile cunoscute;
2. Functia de tiparire a solutiilor;
3. Functia backtracking.
Schema generala a procedurii backtracking:
Void back (int k)
Int I, cont;
{
if (k=n+1) tipar ( );
else for (i=1; i=n; i++)
{
a[k]=i;
cont=1;
pentru cazul prost CONT ia valoarea FALS: cont=0;
if (cont = = 1) back (k+1);
}
}
Programele prezentate mai jos, in pseudocod, sunt:
> Paranteze;
> Comis-voiajor;
> Dame;
> Submultimi;
> Magazin;
> Permutari.
PROGRAME IN PSEUDOCOD
1. Paranteze: se da un numar natural par n. Sa se determine toate sirurile
de n paranteze care se inchid corect.
procedura tipar
j nr natural
pentru p < - 1,n executa // afisarea solutiilor
daca a[p]<-1
atunci scrie ")" // conditie pt
afisarea parantezelor inchise
// de la daca
altfel scrie "("
// de la
pentru
procedura back (k nr natural)
cont, i, d, j nr naturale
daca k=n+1 // conditie pentru afisare
atunci tipar
// de la daca
altfel pentru i <-0,1 executa
a[k]<-1
cont <-1
daca k=1
atunci daca a[k]=1
atunci cont <- 0 // conditie pentru panateza (
// de la daca a[k]=1
// de la daca k=1
daca k=n
atunci daca a[k]=n
atunci cont <- 1 // conditie pentru paranteza )
// de la daca a[k]=n
// de la daca k=n
d<-0 // numara cate paranteze inchise sunt
pentru j <-1,k executa // de la 1 pana la pozitia la care s-a
ajuns executa
daca a[j]=0
atunci d <- d+1 // daca gaseste o paranteza inchisa
atunci d creste
|