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 ; ultimile A1, A2, .., An 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. 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 ? @ date de iesire : @, ?, ? @, 1, 1 @, 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) 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, A A, C3, 1A, 23, CA date de iesire : 1 2 $ 2 ? $ A 5roblema clasicD de pro&ramare care necesitD bac%!trac%in& (revenirea pe urma lDsatD) este problema ieEirii din labirint: Se iniFializeazD labirintul Gn mod static, ca o matrice de caractere (:H; zid si : : drum) Iinclude Iinclude Iinclude Idefine JAJ = Idefine KAJ = char a-JAJ,1.-KAJ,1.=+ :HHHHHHH;, :H H H;, :H H H H;, :H H HHHH;, :HH H H;, :H H :, :HHHHHHHH; 4; int x3=1,L3=2; void print(void)+ int i,6; for(i=3;i8=JAJ;i,,)+ for(6=3;68=KAJ;6,,)putchar(a-i.-6.); putchar(MNnM); 4 &etchar();clrscr(); 4 void escape(int x,int L)+ if(x==JAJ OO L==KAJ)+ puts(PSuccesQP);exit(1);4 a-x.-L.=MHM;print(); if(a-x.-L,1.==M M)+puts(Pla dreaptaP);escape(x,L,1);4 if(a-x,1.-L.==M M)+puts(Pin 6os P);escape(x,1,L);4 if(a-x.-L!1.==M M)+puts(Pla stin&a P);escape(x,L!1);4 if(a-x!1.-L.==M M)+puts(Pin sus P);escape(x!1,L);4 return; 4 void main(void)+ escape(x3,L3); puts(P1rapedQP); 4