Sunteți pe pagina 1din 4

Metoda Backtaking

Enunt:Sa se genereze toate permutarile{1,2,,n}. Program permutari; Uses crt; Const max 2!; "#pe $ector:arra#%1..2!& o' integer; (ar x:$ector; n:integer; proce)ure citire; *egin clrscr; +rite,-n ./;rea)ln,n/; en); proce)ure init,0:integer/; *egin x%0&: 1; en); 'unction exista,0:integer/:2oolean; *egin exista: ,x%0&3n/; en); 'unction cont,0:integer/:2oolean; $ar i:integer; *egin cont: true; 'or i: 1 to 041 )o i' x%0& x%i& t5en cont: 'alse; en); 'unction solutie,0:integer/:2oolean; *egin solutie; ,0 n/; en); proce)ure tipar,0:integer/;

$ari:integer; 'or i: 1 to 0 )o +rite,x%i&:6/; rea)ln; en); proce)ure *0t; $ar 0:integer; *egin 0: 1; init,0/; +5ile 071 )o i' exista,0/ t5en *egin x%0&: x%0&81; i' cont,0/ t5en i' solutie,0/ t5en tipar,0/; else *egin 0: 081; init,0/; en); en); else 0: 041; en); *egin citire; *0t; rea)ln en). 9lgoritmul utilizat pentru generarea acestor com*inari are in $e)ere 'aptul ca orice permutare este alcatuita )in toate elementele multimii,care sunt )istincte. Pentru a scrie programul,sta*ilim urmatoarele repere: (ectorul solutie are n componente:x%0& $ are semni'icatia ca $aloarea $ este asezata pe pozitia 0 in com*inatie;

Pentru orice 0 )in {1,,041} multimea $alorilor posi*ile pentru x%0& este 90 {1,2,,041};initializare se $a 'ace cu x%0& 1; Con)itia )e continuare pentru ca o $aloare x%0& sa 'ie acceptata tre*uie ca pentru orice : apartine {1,2,,041},x%0& )i'erit x%i& ,elementele nmultimii nu tre*uie sa se repete/; 9m gasit o solutie 'inala )aca an completat toate componentele $ectorului ,)eci 0 n/. Pentru exemplul consi)erat,initial 0 1,x%0& 1;,se incepe cu prima componenta si nu s4a testat nici o $aloare /.(ectorul solutie se $a completa ast'el; Sta*ilim prima $aloare posi*ila pentru componenta 0 1;aceasta con$ine si trecem la urmatoarea comoonenta ;0 2. Sta*ilim prima $aloare posu*ila pemtru componenta;0 2,x%2& 1; Con)itiile )e continuare nu sunt in)eplinite, )eoarece $aloare 1 mai apare in aceasta com*inatie.;e aceea ramanem la 0 2. "estam urmatoarea $aloarea posi*ila pentru x%2&,care este 2 < con$ine si se trece la urmatoarea componenta,0 6. :ncepem cu prima $aloare posi*ila pentru aceasta componenta,x%6& 1;nu Con$ine,)eci ramanem la 0 6. Urmatoarea $aloare posi*ila pentru x%0& este 2 si )in nounu con$ine. (aloarea x%6& 6 corespun)e;cum am completat toate cele n 6 componente,tiparim solutia ,1,2,6/;$aloarea 6 este ultima $aloare posi*ila si ca urmare re$enim la componenta anterioara,0 2. Ultima $aloare testate pentru x%2& era 2,)e aceea trecem la urmatoarea $aloare ,x%2& 6,care con$ine si )eci trecem la 0 6. "estam urmatoarea $aloare posi*ila pentru x%6&,care este 2 < con$ine cum am completat $ectorul x, tiparim solutia,1,6,2/ si urmatoarea la 0 6. "estam ultima $aloare posi*ila pentru aceasta componenta,x%6& 6;nu con$ine,)eci re$enim la 0 2; Pentru x%2& am testat toate $alorile posi*ile si ca urmare re$enim la 0 1.

Ultima $aloare testate pentru x%1& este 1;)eci $eri'icam x%1& 2;con$ine,)eci trecem la 0 2.Proce)eul continua pana can) am epuizat toate $alorile pentru prima componenta.
Powered by http://www.referat.ro/ cel mai tare site cu referate

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