1 / 21

Probleme Backtracking

Probleme Backtracking. Pop Paula-XI B. Type stiva = array [1…100] of integer; Var st : stiva; i, j, n, k : integer; as, ev : boolean; a: array [1..20,1..20] of integer; procedure init(k:integer; var st:stiva); begin st[k]:=0; end;

moshe
Download Presentation

Probleme Backtracking

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Probleme Backtracking Pop Paula-XI B

  2. Typestiva = array [1…100] of integer; • Varst : stiva; • i, j, n, k : integer; • as, ev : boolean; • a: array [1..20,1..20] of integer; • procedure init(k:integer; var st:stiva); • begin • st[k]:=0; • end; • procedure succesor(var as:boolean; var st:stiva; k:integer); • begin • if st[k] < 4thenbeginst[k]:=st[k]+1;as:trueendelseas:false • end; • procedure valid (var ev:boolean; st:stiva; k:integer); • var • i:integer; • Beginev:true; • for i:=1 to k-1 do • if (st[i]=st[k]) and (a[i,k]=1)thenev:false • end; • function solutie(k:integer):integer; • Beginsolutie:=(k=n);end; • procedure tipar; • vari:integer;begin • for i:= 1 to n dowriteln(’Tara =’, i,’; culoarea=’,st[i]); • writeln(’===================’)end; • begin • write(’Numarul de tari = ’); • readln(n); • for i:= 1 to n dofor j:=1 to i-1 dobegin • write(’a[’,i,’,’,j,’]=’);readln(a[i,j])end; • k:=1; • init(k,st); • while k>0 do • begin • Repeatsuccesor(as,st,k);if as • Thenvalid(ev,st,k); • until (not as) or (as and ev);if as then • if solutie (k)thentiparelsebegink:=k+1;init(k,st)end • else k:=k-1end • end. Colorarea hartilor

  3. type stiva=array[1..100] of integer;var st:stiva;n,k:integer;as,ev:boolean;procedure init(k:integer;var st:stiva);begin st[k]:=0;end;procedure succesor(var as:boolean;var st:stiva;k:integer);beginif st[k]as:=true endelse as:=false;end;procedure valid(var ev:boolean;var st:stiva;k:integer);var i:integer;begin ev:=true;for i:=1 to k-1 do if (st[k]=st[i]) or (abs(st[k]-st[i])=abs(k-i)) then ev:=false;end;function solutie(k:integer):boolean;beginsolutie:=(k=n);end;procedure tipar;var i:integer;beginfor i:=1 to n do write(st[i]);writeln; end;beginwrite('n:');readln(n);k:=1;init(k,st);while k>0 do begin repeatsuccesor(as,st,k);if as then valid(ev,st,k);until (not as) or (as and ev);if as then if solutie(k) then tiparelse begink:=k+1;init(k,st); endelse k:=k-1; end;readln;end. Problema damelor

  4. type stiva=array[1..100] of integer;var st:stiva;i,n,k:integer;as,ev:boolean;a:array [1..100] of integer;procedure init(k:integer;var st:stiva);beginst[k]:=0;end;procedure succesor(var as:boolean;var st:stiva;k:integer);beginif st[k]<="" font="" then="">st[k]:=st[k]+1;as:=true;endelse as:=false; end;procedure valid(var ev:boolean;st:stiva;k:integer);var i:integer;beginev:=true;end;function solutie(k:integer):boolean;beginsolutie:=(k=n);end;procedure tipar;var i:integer;beginfor i:=1 to n do write(st[i]);writeln;end;beginwrite('Numarul de multimi= ');readln(n);for i:=1 to n do beginwrite('a[',i,']=');readln(a[i]);end;k:=1;init(k,st);while k>0 do begin repeat succesor(as,st,k);if as then valid(ev,st,k);until (not as) or (as and ev);if as then if solutie(k) then tipar else begin k:=k+1; init(k,st);endelse k:=k-1;end; end. Produsul Cartezian

  5. var st:array[1..25] of integer;i,n,p:integer;procedure init;beginwrite('N='); readln(n);for i:=1 to 25 dost[i]:=0;end;function valid(p:integer):boolean;beginvalid:=true;for i:=1 to p-1 doif st[i]=st[p] then valid:=false;end;procedure tipar(p:integer);var i:integer;beginfor i:=1 to p dowriteln(st[i],' ');end;procedure back(p:integer);beginp:=1; st[p]:=0;while p>0 dobeginif st[p]<n then beginst[p]:=st[p]+1;if valid(p) thenif p=n then tipar(p)else beginp:=p+1;st[p]:=0; end;end; else p:=p-1; end;end;begininit;back(1);end. Generarea permutarilor

  6. type stiva=array [1..10] of integer;var st:stiva;    ev,as:boolean;    n,k,p:integer;procedure init(k:integer;var st:stiva);begin if k>1 then st[k]:=st[k-1]        else if k=1 then st[k]:=0;end;procedure succesor(var as:boolean;var st:stiva;k:integer);begin if st[k]<n-p+k then begin st[k]:=st[k]+1;                                         as:=true;                                end                        else as:=false;end;procedure valid(var ev:boolean;var st:stiva;k:integer);var i:integer;beginev:=true;for i:=1 to k-1 do if st[i]=st[k] then ev:=false;if (k>2) and (st[k-1]>st[k]) then ev:=false;end;function solutie(k:integer):boolean;beginsolutie:=(k=p);end;procedure tipar;var i:integer;beginfor i:=1 to p do write (st[i]);writeln;end;begin;write ('n:=');readln (n);write ('p:=');readln (p);k:=1;init(k,st);while k>0 do   begin        repeat           succesor (as,st,k);           if as then valid(ev,st,k);       until (not as) or (as and ev);   if as then  if solutie(k) then tipar                              else begin                                     k:=k+1;                                     init(k,st)     end           else k:=k-1;   end;  readln;end. Generarea combinarilor

  7. var n, ns: byte;sol: array[1..20] of byte;procedure afis(l: byte);var i: byte;begininc(ns);write 'Solutia ', ns, ' : ');for i:=1 to l dowrite(sol[i]:3);writeln;end;procedure back(i, sp: byte);var j: byte;beginif sp = n then afis(i-1)else for j:=1 to n-sp doif (j>=sol[i-1])then beginsol[i]:=j;back(i+1, sp+j)                 end;end;beginread(n);ns:=0;back(1,0);writeln(ns,'solutii');end. Partitia unui numar natural

  8. const nmax=7;type vector=array[1..nmax] of integer;=(1,5,10,50,100,200,500); valori=array[1..nmax] of integer;var x,max:vector;v:valori;s,s1,i,k,n:integer;s:integer;function exista(k:integer):boolean;beginexista:=(k<=n) and (x[k]<max[k])< font=""></max[k])<>end;function cont(k:integer):boolean;begins1:=0;for i:=1 to k dos1:=s1+x[i]*v[i];cont:=(s1<=s);end;function solutie(k:integer):boolean;beginif k=n then begins1:=0;for i:=1 to k dos1:=s1+x[i]*v[i];solutie:=(s1=s);endelsesolutie:=false;end; Plata unei sume

  9. procedure tipar(k:integer);beginfor i:=1 to k doif x[i]<>0 then write(x[i]:3,'de',v[i],'lei');writeln;end;procedure bktr;begink:=1;x[k]:=-1;while k>0 doif exista(k) then beginx[k]:=x[k]+1;if cont(k) thenif solutie(k) then tipar(k)else begink:=k+1;x[k]:=-1;end;endelse k:=k-1;end;beginclrscr;write('n='); readln(n);writeln('valorile monedelor:');for i:=1 to n do beginwrite('v[',i,']=');readln(v[i]); end;write('suma necesara:');readln(s);for i:=1 to n do max[i]:=s div v[i];bktr;end. Plata unei sume

  10. Type vector=array[1..20] of integer;Var x:vector;N,p:integer;Procedure solutie;Var i:integer;BeginFor i:= 1 to p doWrite(‘x[i],’ ‘);End;Function continuare(k:integer);boolean;Var i:integer;BeginContinuare:=true;For i:= 1 to k-1 doIf x[i]=x[k] then continuare:=false;End;Procedure back(k:integer);Var i:integerBeginIf (k=p+1) then solutie Else for i:= 1 to n doBeginX[k]:=1;If continuare (k) then back (k+1)End;Begin write(’n=’); readln(n);Write(‘p=’); readln(p);Back(1);End. Generarea aranjamentelor

  11. Probleme Backtracking-GRILE-

  12. 1. (var1) Utilizând metoda backtracking se generează în ordinelexicografică cuvintele de câte patru litere din mulţimeaA={a,b,c,d,e}, cuvinte care nu conţin două vocale alăturate. Primele opt cuvinte generate sunt, în ordine: abab, abac, abad, abba, abbb, abbc, abbd, abbe.Câte dintre cuvintele generate încep cu litera b şi se termină cu litera e? a. 9 b. 15 c. 12 d. 202. (var2) Utilizând metoda backtracking se generează în ordinelexicografică cuvintele de câte patru litere din mulţimeaA={a,b,c,d,e}, cuvinte care nu conţin două vocale alăturate. Primele opt cuvinte generate sunt, în ordine: abab, abac, abad, abba, abbb, abbc, abbd, abbe. Care este ultimul cuvânt generat? a. edcb b. eeee c. edde d. eded

  13. 3. Utilizând metoda backtracking se generează în ordine lexicografică cuvintele de câte patru litere din mulţimea A={a,b,c,d,e}, cuvinte care nu conţin două vocale alăturate. Primele opt cuvinte generate sunt, în ordine: abab, abac, abad, abba, abbb, abbc, abbd, abbe.Care este penultimul cuvânt generat? a. edec b. eded c. edde d. edcb4. Utilizând metoda backtracking se generează în ordine lexicografică cuvintele de câte patru litere din mulţimea A={a,b,c,d,e}, cuvinte care nu conţin două vocale alăturate. Primele opt cuvinte generate sunt, în ordine: abab, abac, abad, abba, abbb, abbc, abbd, abbe. Care este antepenultimul cuvânt generat? a. edde b. eddb c. edec

  14. 5. Folosind modelul combinărilor se generează numerelenaturale cu câte trei cifre distincte din mulţimea {1,2,3,7}, numere cu cifrele în ordine strict crescătoare, obţinându-se, înordine: 123, 127, 137, 237. Dacă se utilizează exact aceeaşitehnică pentru a genera numerele naturale cu patru cifredistincte din mulţimea {1,2,3,4,5,6,7,8}, câte dintre numerelegenerate au prima cifră 2 şi ultima cifră 7? a. 8 b. 3 c. 4 d. 6C de 4 cate 2= 4!\ 2! *2!=66. Utilizând metoda backtracking sunt generate numerele de 3 cifre, având toate cifrele distincte şi cu proprietatea că cifrele aflate pe poziţii consecutive sunt de paritate diferită. Ştiind că primele şase soluţii generate sunt, înaceastă ordine, 103, 105, 107, 109, 123, 125, care este a zeceasoluţie generată? a. 145 b. 147 c. 230 d. 149

  15. 7. Utilizând metoda backtracking sunt generate numerele de 3 cifre care au cifrele în ordine crescătoare, iarcifrele aflate pe poziţii consecutive sunt de paritate diferită. Ştiind că primele cinci soluţii generate sunt, în această ordine, 123, 125, 127, 129, 145, care este cel de al 8-lea numărgenerat? a. 169 b. 149 c. 167 d. 1478. Un algoritm de tip backtracking generează, în ordinelexicografică, toate şirurile de 5 cifre 0 şi 1 cu proprietatea că nu există mai mult de două cifre 0 pe poziţii consecutive. Primele 7 soluţii generate sunt: 00100, 00101, 00110, 00111, 01001, 01010, 01011. Care este a 8-a soluţie generată de acestalgoritm? a. 01110 b. 01100 c. 01011 d. 01101

  16. 9. Folosind tehnica bactracking un elev a scris un program care generează toate numerele de câte n cifre(0<n≤9), cifrele fiind în ordine strict crescătoare. Dacă n este egal cu 5, câte numere vor fi generate de program? Combinari de 9 luate cate 5=126 10. Utilizând metoda backtracking, sunt generate toate numerele de 3 cifre, astfel încât cifrele sunt în ordinecrescătoare, iar cifrele aflate pe poziţii consecutive sunt de paritate diferită. Ştiind că primele trei soluţii generate sunt, în această ordine, 123, 125, 127, câte dintre toatenumerele generate au suma cifrelor egală cu 6? Doar 1 si anume 125

  17. 11. Folosind tehnica backtracking, un elev a scris un program care generează toate numerele de câte n cifre (1≤n≤9), cifrele fiind în ordine strict crescătoare. Dacă n este egal cu 5, câte dintrenumerele generate au prima cifră 4? Combinari de 5 luate cate 4=512. Pentru a scrie valoarea 10 ca sumă de numere prime se foloseşte metoda backtracking şise generează, în această ordine, sumele distincte: 2+2+2+2+2, 2+2+3+3, 2+3+5, 3+7, 5+5. Folosindexact aceeaşi metodă, se scrie valoarea 9 ca sumăde numere prime. Care sunt primele trei soluţii, înordinea generării lor? 2+2+2+3;;;2+2+5;;;2+7

  18. 13. Trei băieţi, Alin, Bogdan şi Ciprian, şi trei fete, Delia, Elena şi Felicia, trebuie să formeze o echipă de 3 copii, care săparticipe la un concurs. Echipa trebuie să fie mixtă (adică săconţină cel puţin o fată şi cel puţin un băiat). Ordinea copiilorîn echipă este importantă deoarece aceasta va fi ordinea de intrare a copiilor în concurs (de exemplu echipa Alin, Bogdan, Delia este diferită de echipa Bogdan, Alin, Delia). Câte echipese pot forma, astfel încât din ele să facă parte simultan Alin şiBogdan? 18 variante14. Un algoritm generează în ordine crescătoare toatenumerele de n cifre, folosind doar cifrele 3, 5 şi 7. Dacă pentru n=5, primele 5 soluţii generate sunt 33333, 33335, 33337, 33353, 33355, precizaţi care sunt ultimele 3 soluţi generate, în ordinea generării.77773;;77775;;77777

  19. 15.Se generaza toate cvintele de n litere din multimea [ a,b,c,d] astfel incat sa nu existe vecine sau un caracter a alatura c. Ultimele 3 cuvinte generate de lungime 2 sunt ba,ad,ab. Daca se utilizeaza aceeasi tehnica pentru a genera cuvinte de 3 lietere, antepenultimul este?? A) ada, B)abc c)abd d)aba16. Se generaza toate cvintele de n litere din multimea [ a,b,c,d] astfel incat sa nu existe vecine sau un caracter a alatura c. Ultimele 3 cuvinte generate de lungime 2 sunt ba,ad,ab. Daca se utilizeaza aceeasi tehnica pentru a genera cuvinte de 4 litere. Al 3-lea cuvant este??A) dcdc b)abcd c) dcdc d)dcda

  20. 17.Se generaza toate cvintele de n litere din multimea [ a,b,c,d] astfel incat sa nu existe vecine sau un caracter a alatura c. Numarul total de cuvinte de 3 litere generate este??A)26 b)50 c)21 d)15R:7 varinte pt fiecare litera , deci 7*4 din care scadem 2 =2618. Se generaza toate cvintele de n litere din multimea [ a,b,c,d] astfel incat sa nu existe vecine identice si nici a sau b.Ultimele 3 cuvinte de 2 litere sunt: “da”, “db”, “dc”. Antepenultimul cuvant generat de 3 litere este??A) dbd b)dca c)dcb d)dcd

  21. 19.Se generaza toate cvintele de n litere din multimea [ a,b,c,d] astfel incat sa nu existe vecine identice si nici a sau b.Ultimele 3 cuvinte de 2 litere sunt: “da”, “db”, “dc”.Daca se utilizeaza aceeasi tehnica si pentru cuvintele de 4 litere, al 3 lea cuvant generat este??A)dcab b)acac c)acdc d)acac20.Se genereaza in ordine crescatoare numerele toate de 5 cifre distincte cu [2,3,4,5,6]. Numarul generat inainte si dupa secventa este?? 32654<-----34256,,,34265,,,34526,,,34562--34625

More Related