1 / 33

Probleme la metoda backtracking

Probleme la metoda backtracking. 1. G enerarea permutărilor Se citeşte un număr natural n. Să se genereze permutările de n elemente ale mulţimii {1,2,…,n}. Simulaţi executarea algoritmului pentru n=3. Type vector = array[1..100] of integer; Var x:vector; n: integer;

petula
Télécharger la présentation

Probleme la metoda 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 la metoda backtracking

  2. 1.Generarea permutărilor Se citeşte un număr natural n. Să se genereze permutările de n elemente ale mulţimii {1,2,…,n}. Simulaţiexecutareaalgoritmuluipentru n=3. Type vector = array[1..100] of integer; Var x:vector; n: integer; Procedure solutie; Var i: integer; Begin Write (‘(‘); For i:= 1 to do write (x[i],’,’); Writeln (x[n],’)’) End; Function continuare (k:integer):Boolean; Var i:integer; ok:Boolean; Begin Ok:= true ; If k = 1 then continuare:= true Else if i:= 1 to k-1 do if x[k]=x[i] then ok:= false Continuare:= ok; End;

  3. Procedure back (K:integer); Var i:integer; Begin If (k=n+1) then solutie Else Begin For i:= 1 to n do Begin x[k]:=I ; If continuare (k) then back (k+1); End; End; End; Begin Write (‘n=’); readln (n); Back(1); Readln; End. Pt n=3 se genereaza: (1,2,3), (1,3,2), (2,1,3), (2,3,1), (3,1,2), (3,2,1),

  4. 2.Generarea permutărilor unui vector Se citesc cele n elemente ale unui vector a de numere întregi. Să se genereze permutările de n elemente ale mulţimii {a1,a2,…,an}. Simulaţiexecutareaalgoritmuluipentru n=3. Type vector= array[1..20] of integer Var a,x: vector; Procedure citire ( var n:integer; var a:vector); Var i:integer; Begin Write (‘n=’); readln (n); For i:=1 to n do Begin Write (‘a[‘,i,’]=’); Readln (a[i]) End; End; Procedure solutie; Var i:integer; Begin For i:=1 to n do Write (a[x[i]],’ ‘);Writeln; End;

  5. Function continuare ( k:integer):Boolean; Var i:integer; Begin Continuare:= true; For i:= 1 to k-1 do if x[i]=x[k] then continuare := false; End; Procedure back (k:integer); Var i: integer; Begin If (k=n+1) then solutie Else for i:=1 to n do Begin X[k]:= i ; If continuare (k) then back ( k+1); End; End; Begin Citire (n,a); Back(1); End.

  6. 3.Generarea aranjamentelor Se citesc două numere naturale n şi p. Să se genereze toate aranjamentele de n elemente luate câte p ale mulţimii {1,2,…,n}. Simulaţiexecutareaalgoritmuluipentru n=4 şi p=2. Type vector= array [1..20] of integer; Var x:vector; N,p: integer; Procedure solutie; Var i:integer; Begin For i:= 1 to p do Write (x[i],’ ‘); End; Function continuare (k:integer):Boolean; Var i:integer; Begin Continuare:= true; For I:= 1 to k-1 do if x[i]=x[k] then continuare:= false; End;

  7. Procedure back (K:integer); Var i: integer; Begin If ( k=p+1) then solutie Else for I:=1 to n do Begin W[k]:=I; If continuare (k) then back(k+1); End; End; Begin Write ( ‘n=’); readln(n); Write ( ‘p=’); readln(p); Back(1); End. Pentru n=4 si p=2 se genereaza: (1,2),(1,3),(1,4), (2,1),(2,3),(2,4), (3,1),(3,2),(3,4), (4,1),(4,2),(4,3)

  8. 4.Generarea combinărilor Se citesc două numere naturale n şi p. Să se genereze toate combinările de n elemente luate câte p ale mulţimii {1,2,…,n}. Simulaţiexecutareaalgoritmuluipentru n=4 şi p=2. Type vector = array [0..20] of integer; Var x:vector; N,p : integer; Procedure solutie; Var i: integer; Begin For i:=1 to p do write (x[i], ‘ ‘); Writeln; End; Procedure back ( k: integer); Var I : integer; Begin If (k=p+1) then solutie Else for i:= x[k-1]+1 to n do

  9. Begin X[k]:=I; Back (k+1); End; End; Begin Write (‘n=’); readln (n); Write (‘p=’); readln (p); Back(1); End. Pentru n=4 si p=2 se genereaza: (1,2) (1,3) (1,4) (2,3) (2,4) (3,4)

  10. 5.Generarea partiţiilor unui număr natural Se citeşte numărul natural n. Să se genereze toate modurile de descompunere a lui n ca sumă de numere naturale. Simulaţiexecutareaalgoritmuluipentru n=5. Type vector = array [1..20] of integer Var x: vector; N,s: integer; Procedure solutie (k:integer); Var i: integer; Begin For i:= 1 to k do write (x[i], ‘ ‘); Writeln; End; Function continuare ( k: integer): Boolean; Begin Continuare:= ( x[k]+s)< n; End;

  11. Procedure back (k:integer); Begin If (s=n) then solutie (k-1) Else Begin X[k]:=0; While continuare(k) do Begin X[k]:= x[k]+1; S:=s+x[k]; Back k(k+1); S:=s-x[k]; End; End; End; Begin Write(‘n=’); Readln(n); Back(1); Readln; End. Pentru n=5 Raspuns: 1+1+1+1+1; 1+1+1+2; 1+1+2+1; 1+2+1+1; 1+1+3; 1+3+1; 2+1+1+1; 2+1+2; 2+2+1; 3+1+1; 3+2; 4+1; 5+0.

  12. 6.Generarea submulţimilor Se citeşte numărul natural n. Să se genereze toate submulţimile mulţimii {1,2,…,n}. Simulaţiexecutareaalgoritmuluipentru n=3. Type stiva= array[1..20] of integer; Var x: stiva N,k: integer; Procedure solutie ; Var I : integer; Begin For i:= 1 to n do write (x[i], ‘ ‘);Writeln; End; End; Function continuare (k:integer):Boolean; Var I : integer; Begin Continuare:= true; End;

  13. Procedure backtrack; Bagin K:=1; x[k]:= -1; While (k>0) do Begin while (x[k]<1) do Begin X[k]:= x[k]+1; If continuare (k) then if (k=n) then solutie Else begin K:=k+1; X[k]:= -1; End; End; K:=k-1; End; End; Begin Write (‘n=’); readln(n); Backtrack; End. Pentru n=3 si multimea {1,2,3} Submultimile generate sunt: {Ø},{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3}.

  14. 7.Problema colorării hărţilor Fiind data o hartă cu n ţări, se ceretoatesoluţiile de colorare a hărţii, utilizândcelmult 4 culori, astfelîncâtdouăţări cu frontierăcomunăsă fie coloratediferit. Const c:array[1..4] of char= (‘G’,’R’,’A’,’V’); Type vector= array[1..50] of integer; Matrice= array[1..50,1..50] of integer; Var A: matrice; X:vector; N:integer; Procedure citire (var n:integer; var A:matrice); Var I,j:integer; Begin Write (‘n=’); readln(n); For i:=1 to n do For j:=1 to n do Begin write (‘A[‘,I,’,’,j,’]=’); Readln ( A[I,j]) End; End; Procedure solutie; Var i: integer; Begin

  15. For i:=1 to n do Writeln ( ‘tara’,I,’:’, C[x[i]]); End; Function continuare (k:integer):Boolean; Var i: integer; Begin Continuare := true ; For i:= 1 to k-1 do If ( A[I,k]=1) and ( x[i]=x[k]) then Continuare :=false End; Procedure back(k:integer); Var i:integer; Begin If(k=n+1) then solutie Else For i:= 1 to 4 do Begin x[k]:= i ; If continuare (k) then Back(k+1) End; End; Begin Citire (n,A); Back(1); End.

  16. 8.Săritura calului Se consideră o tablă de şahnxnşi un calplasatîncolţul din stânga, sus. Se ceresă se afişeze un drum al caluluipe table de şah, astfelîncâtsătreacă o singurădatăprinfiecarepătrat al tablei. Type vector= array [1..400] of integer; Matrice = array [1..20,1..20] of integer; Const dx : array [1..8] of integer = (-2,-1,1,2,2,1,-1,-2); Dy : array[1..8] of integer = (-1,-2,-2,-1,1,2,2,1); Var A: matrice; X,y:vector; N: integer; Procedure solutie; Var I,j:integer; Begin writeln; For i:= 1 to n do For j:= 1 to n do Begin Write ( A[I,j], ’ ‘); Writeln; End; End;

  17. Function continuare ( k:integer):Boolean; Var ok:Boolean; Begin Ok:= true; If (x[k]<1) or (k[k]>n) or (y[k]<1) or (y[k]>n) Or ( A[x[k],y[k]]>0) Then ok:false; Continuare :=ok; End; Procedure back(k:integer); Var I:integer; Begin If (k= nxn+1) then solutie Else begin For i:=1 to 8 do

  18. Begin X[k]:= x[k-1]+ dx[i]; Y[k]:=y[k-1]+dy[i]; A[x[k],y[k]]:=k; If continuare (k) then Back(k+1); A[x[k],y[k]]:=0; End; End; End; Begin Write ( ‘n=’); readln(n); X[1]:=1 , y[1]:= 1, A[1,1]:=1; Back(2); Readln; End.

  19. 9.Problema reginelor Să se determine toate posibilităţile de aranjare a n regine pe o tablă de şah de dimensiune nxn astfel încât reginele să nu se atace reciproc. Regina atacă piesele aflate pe aceeaşi linie, coloană sau diagonală. Type vector= array [1..30] of integer; Var x: vector; N: integer; Procedure solutie; Var i,j: integer; Begin Writeln; For i:= 1 to n do Begin For j:= 1 to n do If x[i]=j then write (‘*’) Else write (‘ ‘); Writeln; End; End; Function continuare (k:integer):Boolean; Var i:integer; ok:Boolean; Begin

  20. ok:=true; For i:= 1 to k-1 do If (x[k]=x[i]) or (abs (x[k]-x[i])=(k-i)) then ok := false Continuare :=ok; End; Procedure back(k:integer); Var i:integer; Begin If ( k=n+1)then solutie Else Begin For i:= 1 to n do Begin X[k]:= i If continuare (k) then Back(k+1); End; End; End; Begin Write (‘n=’); readln(n); Back (1); Readln; End.

  21. 10.Problema turelor Să se determine toate posibilităţile de aranjare a n ture pe o tablă de şah de dimensiune nxn astfel încât turele să nu se atace reciproc. Tura atacă piesele aflate pe aceeaşi linie sau coloană. Type vector= array [1..30] of integer; Var x: vector; N: integer; Procedure solutie ; Var I,j: integer; Begin For i:= 1 to n do Begin For j:=1 to n do If x[i]=j then write (‘*’) Else write (‘ ‘); Writeln; End; End; Function continuare (k:integer):Boolean; Var i:integer; ok:Boolean; Begin Ok:= true ;

  22. If k = 1 then continuare:= true Else if i:= 1 to k-1 do If x[k]=x[i] then ok:= false Continuare:= ok; End; Procedure back (K:integer); Var i:integer; Begin If (k=n+1) then solutie Else Begin For i:= 1 to n do Begin x[k]:=I ; If continuare (k) then back (k+1); End; End; End; Begin Write (‘n=’); readln (n); Back(1); Readln; End.

  23. Probleme de tip grila

  24. 1. Folosind modelul combinărilor se generează numerele naturale 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, în ordine: 123, 127, 137, 237. Dacă se utilizează exact aceeaşi metodă pentru a genera numerele naturale cu patru cifre distincte din mulţimea {1,2,3,4,5,6,7,8}, câte dintre numerele generate au prima cifră 2 şi ultima cifră 7? 2347 2357 2367 2457 2467 2567 6 numere 2. Folosind tehnica bactracking un elev a scris un program care generează toate numerele decâte n cifre (0<n≤9), cifrele fiind în ordine strict crescătoare. Dacăn este egal cu 5, scriețiîn ordine crescătoare toate numerele având cifra unităților 6, care vor fi generate deprogram. 12346 , 12356 , 12456 , 13456 , 23456

  25. 3. Utilizând metoda backtracking sunt generate numerele de 3 cifre care au cifrele în ordinecrescătoare, iar cifrele 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 estecel de al 8-lea număr generat? 123 125 127 129 145 147 149 167 4. Utilizând metoda backtracking sunt generate în ordine crescătoare toate numerele de 3cifre, astfel încât cifrele sunt în ordine crescătoare, iar cifrele aflate pe poziţiiconsecutivesunt de paritate diferită. Ştiind că primele trei soluţii generate sunt, în această ordine, 123,125, 127, scrieţi toate numerele generate care au suma cifrelor egală cu 12. 129 147 345

  26. 5. Utilizând metoda backtracking se generează permutările cuvântului info. Dacă primele treisoluţii generate sunt: fino, fion, fnio care este cea de-a cincea soluţie? Info fino fion fnio fnoi foin 1234 3124 3142 3214 3241 3412 6. Câte numere cu exact două cifre pot fi construite folosind doar cifre pare distincte? 24 26 28 42 46 48 62 64 68 82 84 86 12 numere 7. Un algoritm generează, în ordine lexicografică, toate şirurile alcătuite din câte n cifre binare(0 şi 1). Ştiind că pentru n=5, primele 4 soluţii generate sunt 00000, 00001, 00010, 00011, precizaţi care sunt ultimele 3 soluţii generate, în ordinea obţinerii lor. 11101 11110 11111

  27. 8. Un algoritm generează în ordine descrescătoare, toate numerele de n cifre (n<9), cu cifreleîn ordine strict crescătoare, care nu au două cifre pare alăturate. Dacă pentru n=5, primele5 soluţii generate sunt 56789, 45789, 45679, 45678, 36789, precizaţi care sunturmătoarele 3 soluţii generate, în ordinea obţinerii lor. 35679 35678 34789 • 9 Un program citeşte o valoare naturală nenulă impară pentru n şi apoi generează şi afişeazăîn ordine crescătoare lexicografic toate combinaţiile formate din n cifre care îndeplinescurmătoarele proprietăţi: • - încep şi se termină cu 0; • modulul diferenţei între oricare două cifre alăturate dintr-o combinaţie este 1.Astfel, pentru n=5, combinaţiile afişate sunt, în ordine, următoarele: 01010, 01210. Dacăse rulează acest program şi se citeşte pentru n valoarea 7, imediat dupăcombinaţia0101210 va fi afişată combinaţia: • a. 0121210 b. 0123210 c. 0111210 d. 0121010

  28. 10. Pentru generarea în ordine crescătoare a numerelor cu n cifre formate cu elementelemulţimii {0,2,8} se utilizează un algoritm backtracking care, pentru n=2, generează, înordine, numerele20,22,28,80,82,88.Dacă n=4 şi se utilizează acelaşi algoritm, precizaţi câte numere generate sunt divizibilecu 100? 2000 2200 8000 8800 2800 8200 6 numere 11. Având la dispoziţie cifrele 0, 1 şi 2 putem genera, în ordine crescătoare, numere care ausuma cifrelor egală cu 2 astfel încât primele 6 numere generate sunt, în această ordine: 2,11, 20, 101, 110, 200. Folosind acelaşi algoritm se generează numere cu cifrele 0, 1, 2 şi3 care au suma cifrelor egală cu 4. Care va fi al 7-lea număr din această generare ? 13 22 31 103 112 121 130

  29. 12. Generarea tuturor cuvintelor de trei litere mici, nu neapărat distincte, ale alfabetului englez,se poate realiza cu ajutorul unui algoritm echivalent cu cel de generare a: • produsului cartezian b. Combinărilor c. aranjamentelor • d. Permutărilor 13. Folosind un algoritm de generare putem obţine numere naturale de k cifre care au sumacifrelor egală cu un număr natural s. Astfel, pentru valorile k=2 şi s=6 se generează, înordine, numerele: 15, 24, 33, 42, 51, 60. Care va fi al treilea număr generat pentru k=4 şis=5? 1004 1013 1022 14. Utilizăm metoda backtracking pentru generarea tuturormodalităţilor de a scrie numărul 6 casumă a cel puţin două numere naturale nenule. Termenii fiecărei sume sunt în ordinecrescătoare. Soluţiile se generează în ordinea: 1+1+1+1+1+1, 1+1+1+1+2, 1+1+1+3,1+1+4, 1+5, 2+2+2, 2+4 şi 3+3. Se aplică exact aceeaşi metodă pentru scrierea lui 9.Câte soluţii de forma 2+... vor fi generate? 2+2+2+3 2+2+5 2+7 2+3+4 4 solutii

  30. 15. Completarea unui bilet de LOTO presupune colorarea a 6 numere dintre cele 49, înscrisepe bilet. O situaţie statistică pe o anumită perioadă de timp arată că cele mai frecventenumere care au fost extrase la LOTO sunt: 2, 20, 18, 38, 36, 42, 46, 48. Câte bilete de 6numere se pot completa folosind doar aceste valori, ştiind că numărul 42 va fi colorat pefiecare bilet? a. 21 b. 6! c. 42 d. 56 Combinari de 7 elemente luate cate 5 = 5040/ 240 = 21 16. În câte dintre permutările elementelor mulţimii {‘I’,’N’,’F’,’O’} vocalele apar pe poziţii consecutive? I O N F F I O N I O F N F O I N O I N F N F I O O I F N F N I O N O I F N F O I N I O F F N O I 12 permutari

  31. 17. Un algoritm generează în ordine crescătoare toate numerele de n cifre, folosind doar cifrele3, 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ţii generate, în ordinea generării. 77773 77775 77777 18. Un algoritm generează în ordine crescătoare, toate numerele de n cifre (n<9), cu cifredistincte, care nu au două cifre pare alăturate. Dacă pentru n=5, primele 5 soluţii generatesunt 10325, 10327, 10329, 10345, 10347, precizaţi care sunt următoarele 4 soluţiigenerate, în ordinea obţinerii lor. 10349 10365 10367 10369

  32. 19. Utilizăm metoda backtracking pentru generarea tuturor modalităţilor de a scrie numărul 9 casumă a cel puţin două numere naturale nenule distincte. Termenii fiecărei sume sunt în ordine strict crescătoare. Soluţiile se generează în ordinea: 1+2+6, 1+3+5, 1+8, 2+3+4,2+7, 3+6 şi 4+5. Se aplică exact aceeaşi metodă pentru scrierea lui 12. Scrieţi, în ordineagenerării, toate soluţiile de forma 2+... 2+3+7 2+4+6 20. Generând şirurile de maximum 3 caractere distincte din mulţimea {A,B,C,D,E}, ordonatelexicografic, obţinem succesiv: A, AB, ABC, ABD,…. Ce şir va fi generat imediat după BAE? Notam literele cu cifre : A B C D E astfel se genereaza: 1 2 3 4 5 1 12 123 124 Dupa B A E se genereaza B C 2 1 5 2 3

  33. Realizator : MadalinaBorzasi Cls. a XI-a B Prof. TomsaGelu

More Related