Sunteți pe pagina 1din 8

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=x
1
x
2
,..,x
n
cu x
1
A
1
, x
2
A
2
, .., x
n
A
n
;
ultimile A
1
, A
2
, .., A
n
sunt multimi finite, iar elementele lor se considera ca se afla intr!o relatie de
ordine bine stabilita;
"u se dispune de o alta metoda de rezolvare, mai rapida;
Aceasta tehnica presupune trei functii:
1. #unctia de citire a valorile cunoscute;
2. #unctia de tiparire a solutiilor;
$. #unctia bac%trac%in&.
Schema &enerala a procedurii bac%trac%in&:
'oid bac% (int %)
*nt *, cont;
+
if (%=n,1) tipar ( );
else for (i=1; i=n; i,,)
+
a-%.=i;
cont=1;
pentru cazul prost /0"1 ia valoarea #A2S: cont=3;
if (cont = = 1) bac% (%,1);
4
4
5ro&ramele prezentate mai 6os, in pseudocod, sunt:
5aranteze;
/omis!voia6or;
7ame;
Submultimi;
a&azin;
5ermutari.
2
PROGRAME IN PSEUDOCOD
1. 5aranteze: se da un numar natural par n. Sa se determine toate sirurile de n paranteze care se inchid
corect.
procedura tipar
6 nr natural
pentru p 8 ! 1,n executa 99 afisarea solutiilor
daca a-p.8!1
atunci scrie :); 99 conditie pt afisarea parantezelor inchise
99 de la daca
altfel scrie :(;
99 de la pentru
procedura bac% (% nr natural)
cont, i, d, 6 nr naturale
daca %=n,1 99 conditie pentru afisare
atunci tipar
99 de la daca
altfel pentru i 8!3,1 executa
a-%.8!1
cont 8!1
daca %=1
atunci daca a-%.=1
atunci cont 8! 3 99 conditie pentru panateza (
99 de la daca a-%.=1
99 de la daca %=1
daca %=n
atunci daca a-%.=n
atunci cont 8! 1 99 conditie pentru paranteza )
99 de la daca a-%.=n
99 de la daca %=n
d8!3 99 numara cate paranteze inchise sunt
pentru 6 8!1,% executa 99 de la 1 pana la pozitia la care s!a a6uns executa
daca a-6.=3
atunci d 8! d,1 99 daca &aseste o paranteza inchisa atunci d creste
99 de la daca
99 de la pentru (6)
daca d<n92
atunci cont 8! 3 99 conditie pt ca nr. de paranteze inchise sa nu fie mai mare de n92
99 de la daca
daca %!d<d
atunci cont 8! 3 99 conditie pt ca diferenta dintre pozitia la care s!a a6uns (%) si nr. de paranteze inchise
sa nu fie mai mare de numarul de paranteze inchise
99 de la daca
$
daca cont=1
atunci bac% (%,1) 99 apelarea recursiva a procedurii bac% (cu parametru )
99de la daca
99de la pentru (i)
pro&ramul principal
se citeste n ( n nr natural )
bac% (1) 99 apelarea procedurii bac% pentru %=1
exemplu:
date de intrare: n==
date de iesire : ( ( ( ) ) ), ( ( ) ( ) ), ( ) ( ) ( ), ( ) ( ( ) ), ( ( ) ) ( )

2. >n comis voia6or porneste din orasul 1 si trebuie sa treaca prin toate cele n!1 orase ramase astfel incat sa
nu treaca de 2 ori prin acelasi oras si sa se intoarca in orasul 1. Se citesc le&aturile dintre cele n orase cu
a6utorul unui matrice de adiacenta cu n linii si n coloane.
procedura tipar
6 nr natural
pentru 6 8! 1,n executa 99 tiparirea solutiilor
scrie a-6.
// de la pentru
procedura bac% (% nr intre&)
i,t,cont nr intre&i
daca %=n,1 99 conditie pt tiparirea solutiilor
atunci tipar
99 de la daca
altfel
pentru i 8! 1,n executa
a-%. 8! i
cont 8!1
daca %<1
pentru t 8!1,%!1
daca a-%.=a-t. 99 conditie pt orase distincte
atunci cont 8! 3
99 de la daca
99 de la pentru (t)
daca a-m-%!1.-%.. =3 99 conditie pt ca intre 2 orase sa existe drum
atunci cont 8! 3
99 de la daca
daca a-m-n.-1..=3 99 conditie pt ca intre ultimul si primul oras sa existe drum
atunci cont 8! 3
99 de la daca
99 de la daca (%<1)
?
daca cont=1
atunci bac%(%,1) 99 apelarea recursiva a procedurii bac% (cu parametru )
99 de la daca
99 de la pentru (i)
pro&ram principal
citeste n (n nr natural)
pentru b8!1,n (b nr natural) 99 citirea matricei de adiacenta
pentru c8! 1,n (c nr natural)
scrie m-b.-c. (valori naturale)
99 de la pentru (c8!1,n)
99 de la pentru (b8!1,n)
bac%(1) 99 apelarea procedurii bac% (pt %=1)
exemplu :
date de intrare : ?
3 1 1 1
1 3 1 1
1 1 3 1
1 1 1 3
date de iesire : 1 2 $ ?
1 $ 2 ?
$. Se dau n dame si se cere sa fie asezate pe o tabla de sah (n x n ) astfel incat ele sa nu se atace.
procedura tipar
i nr natural
pentru i 8! 1,n executa 99 tiparirea solutiilor
scrie a-i.
99 de la pentru
procedura bac% (% nr intre&)
t, i, cont nr intre&i
daca %=n,1 99 conditie pt tiparirea solutiilor
atunci tipar
99 de la daca
altfel
pentru i 8!1,n executa
a-%.8!i
cont8!1
daca %<1
pentru t 8!1,%!1 executa
daca a-%.=a-t. sau a-%.!a-t. = %!t 99 conditii pt ca damele sa nu se atace
atunci cont 8!3
99 de la daca
@
99 de la pentru (t)
99 de la daca (%<1)
daca cont 8!1
atunci bac%(%,1) 99 apelarea recursiva a procedurii bac% ( cu parametru )
99 de la daca
99 de la pentru (i)
pro&ram principal
citeste n (nr natural)
bac% (1) 99 apelarea procedurii bac% (pt %=1)
exemplu :
date de intrare : ?
date de iesire : 2 ? 1 $
$ 1 ? 2
?. Aflati toate submultimile care sunt incluse intr!o multime data. Se citesc nr de elemente ale multimii si
elementele sale.
procedura tipar
6 nr natural
pentru 6 8! 1,n executa
daca a-6.=1 99 conditie pt tiparirea solutiilor
scrie m-6. 99 tiparirea solutiilor
99 de la daca
99 de la pentru
procedura bac% (% nr natural)
cont, i nr naturale
daca %=n,1 99 conditie pt tiparirea solutiilor
atunci tipar
99 de la daca
altfel
pentru i 8! 3,1 executa
a-%. 8!i
cont 8!1
daca cont =1 99 nu sunt conditii de continuare
atunci bac% (%,1) 99 apelarea recursiva a procedurii bac% ( cu paremetru )
99 de la daca
99 de la pentru
pro&ramul principal
citeste n ( nr natural )
pentru x 8!2,n (x nr natural)
citeste m-x. ( valori naturale)
=
99 de la pentru
bac%(1) 99 apelarea procedurii back (pt k=1)
exemplu :
date de intrare : $
1 ? A
date de iesire : A, ?, ? A, 1, 1 A, 1 ?, 1 ? A
@. >n copil intra intr!un ma&azin de 6ucarii. Bl are o suma s de bani si doreste sa!si cumpere cat mai multe
6ucarii. Sa se cate produse diferite poate cumpara copilul stiind ca in ma&azin se afla n produse, fiecare
avand cate un pret dat.
procedura tipar (% nr natural)
pentru i 8! 1,%!1 executa
scrie a-i. 99 tiparirea solutiilor
99 de la pentru
procedura bac%(% nr natural, suma nr intre&)
t, i, cont nr naturale
daca s=suma 99 conditia pt tiparirea solutiilor
atunci tipar(%) 99 apelarea procedurii tipar (cu parametru )
99 de la daca
altfel
pentru i 8! 1,n executa
a-%.8!i
cont8!1
daca %<1
pentru t 8!1, %!1
daca a-%.8=a-t. 99 conditie pt a nu se repeta produsele in cadrul aceleiasi solutii
atunci cont 8!3
99 de la daca
99 de la pentru (t)
99 de la daca (%<1)
daca suma<s 99 conditie pt ca preturile produselor (suma) 8 suma disponibila (s)
atunci cont 8!3
99 de la daca
daca cont=1
atunci bac%(%,1, suma,p-a-%..) 99 apelarea recursiva a procedurii bac%
99 suma,p-a-%.. reprezinta suma anterioara , pretul produsului a-%.
99 de la daca
99 de la pentru (i)
pro&ramul principal
citesc s (nr intre&)
citesc n (nr natural)
A
pentru 6 8! 1,n executa
citesc p-6. (valori intre&i) 99 se citesc preturile produselor
99 de la pentru
bac% (1,3) 99 apelarea procedurii bac% (pt %=1 si suma=3)
exemplu :
date de intrare : 133, @
@, C3, 1@, 23, C@
date de iesire : 1 2 $
2 ?
$ @
C

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