Albu Daniela

Embed Size (px)

Citation preview

  • 7/26/2019 Albu Daniela

    1/34

    METODA BACKTRACKING

    1.PROBLEME

  • 7/26/2019 Albu Daniela

    2/34

    1.Problema reginelorS se determine toate posibilitile de aranjare a n regine pe o tabl de ah de dimensiune nxnastfel nct reginele s nu se atace reciproc. Regina atac piesele aflate pe aceeai linie, coloan sau diagonal.

    o Recursiv

    type vector=array [1..30] of integer;

    var x: vector;

    n: integer;

    procedure solutie;

    var i,j : integer;

    egin !riteln

    for i:=1 to n do

    egin

    for j:=1 to n do

    if x[i]=j t"en !rite #$%&'

    else !rite #$(&';

    !riteln;

    end;

    end;

  • 7/26/2019 Albu Daniela

    3/34

    function continuare #):integer':oolean;

    var i:integer;

    o):oolean;

    egin

    o):=true;

    for i:=1 to )*1 do if #x[)]=x[i]' or # as#x[)] + x[i]' = #)*1'' t"en o):=false

    continuare:=o);

    end;

    procedure ac)#):integer';

    var i: integer;

    egin

    if #)=n1' t"en solutie

    else

    egin

    for i:=1 to n do

    egin

    x[)]:=i;

    if continuare#)' t"en ac) #)1';end;

    end;

    end;

    egin

    !rite#$n=$'; readln#n';

    ac)#1'; readln;

    end;.

  • 7/26/2019 Albu Daniela

    4/34

    o -terativ

    var solutie: array [1..] of integer; n:integer;

    function valid #): integer': oolean;

    var i: integer;

    egin

    valid:=true;

    for i:= 1 to )*1 do

    if #sol [)] = sol [i]' or #as#sol [)] + sol [i]'=as#)*1'' t"en

    valid:=false

    end;

    procedure ac)#):integer';

    var i:integer;

  • 7/26/2019 Albu Daniela

    5/34

    egin

    if )=n1 t"en egin

    for i:=1 to n do

    !rite #sol [i]';!riteln;

    end

    else egin

    sol[)]:=0;

    !"ile sol [)] / n do

    egin

    sol [)] :=sol [)] 1;

    if valid #)' t"en ac) #)1'

    end;

    end;

    end;

    egin

    !rite#$n&'; readln#n';

    ac)#1'

    end.

  • 7/26/2019 Albu Daniela

    6/34

    2.Plata unei sume cu bancnote de valori dateSe dau sumaS i n tipuri de bancnote avnd valori a1,a2,,an lei. Se cer toatemodalitile de plat a sumei S utiliznd aceste bancnote. Se presupune c sedispune de un numr suficient din fiecare tip de bancnot.

    o Recursiv

    const=;

    const a: array[1..n] of integer=#1,,10,0,100,200,00';

    type vector= array [1..n] of integer;

    var x:integer; sua, s: integer;

    procedure solutie;

    var i: integer;

    egin

    for i:=1 to n do

    if x[i] 40 t"en !rite #x[i], $acnote de&, a [i], $lei&'; !riteln #$============$';

    end;

    function continuare #):integer': oolean;

    egin

    continuare:=#x [)]% a [)] s / sua' and #)/=n';end;

  • 7/26/2019 Albu Daniela

    7/34

    procedure ac) #):integer': integer;

    egin

    if # s= sua' t"en solutie

    else egin

    x[)]:=1;

    !"ile continuare#)' do

    egin

    x[)]:=x [)]1

    s:=sx[)]%a[)]; ac)#)1';

    s:=s*x [)] %a [)];

    end;

    end;

    end;egin

    !rite #$sua=$'; readln #sua';

    ac)#1';

    readln#1';

    end.

  • 7/26/2019 Albu Daniela

    8/34

    3.Problema colorrii hriloriind data o hart cu n ri, se cere toate soluiile de colorare a hrii, utiliznd celmult ! culori, astfel nct dou ri cu frontier comun s fie colorate diferit.

    o Recursiv

    const c: array [1..5] of c"ar= #$6&,&R&,&7&,&8&';

    type vector=array [1..0] of integer;

    atrice=array [1..0,1..0] of integer;

    var a:atrice; x:vector; n:integer;

    procedure citire #var n: integer; var a:atrice';

    var i,j:integer;

    egin

    !rite#$n=$';readln#n';

    for i:=1 to n do

    for j:=1 to n do

    egin

    !rite #$a[$, i, $,& , j, $]=$'; readln #a[i,j] '

    end;end;

    procedure solutie;

    var i: integer;

    egin

    for i:=1 to n do

    !riteln #$tara&, -, $:&, c [x [i]]';end;

  • 7/26/2019 Albu Daniela

    9/34

    funtion continuare #): integer': oolean;

    var i: integer;

    egin

    continuare:= true;

    for i:=1 to )*1 do if #a[i,)]=1' and #x[i]=x [)]' t"en continuare :=false&

    end;

    procedure ac) #):integer';

    var i:integer;

    egin

    if #)=n1' t"en solutie

    else for i:= 1 to 5 do

    egin

    x[)]:=1;

    if continuare #)' t"en ac) #)1';

    end;

    end;

    egin

    citire #n,a';

    ac)#1';

    end;.

    ! it l l i

  • 7/26/2019 Albu Daniela

    10/34

    .!ritura caluluiSe consider o tabl de ah nxn i un cal plasa t ncolul din stnga, sus. Se ceres se afieze un drum al calului pe table de ah, astfel nct s treac o singurdat prin fiecare ptrat al tablei.

    o

    Recursivtype vector=array [1..500] of integer;

    atrice=array [1..20,1..20] of integer;

    coust dx:array [1..9] of integer=#*2,*1,1,2,2,1,*1,*2';

    dy:array[1..9] of integer=#*1,*2,*2,*1,1,2,2,1';

    var a:atrice; x,y: vector; n:integer;

    procedure solutie

    var i,j: integer;

    egin !riteln

    for i:=1 to n do

    egin

    for i:=1 to n do

    !rite #a[-,j], $ $'; !riteln;

    end;

    end;

    function continuare #):integer':oolean;

    var o): oolean;

    egin

    o)::=true;

    if #x [)]/1' or #x [)]4n' or #y [)]/1' or #y [)])4n' or #a[x[)], y[)]]40' t"en o):= false;

    continuare:=o);end;

  • 7/26/2019 Albu Daniela

    11/34

    procedure ac) #):integer';

    var i:integer;

    egin

    if #)= n%n1' t"en solutie

    else egin

    for i:= 1 to 9 do egin

    x [)]:= x [)*1] dx [i];

    y [)]:= y [)*1] dy [i] ;

    a [x [)],y [)] ]:=);

    if contiuare #)' t"en egin

    ac)#)1';

    a [x [)], y [)] ]:=0;

    end;

    end;

    end;

    end;

    egin

    !rite#$n=$'; readln#n';

    x[i]:=1; y[1]:=1; a[1,1]:=1;

    ac) #2';

    end.

  • 7/26/2019 Albu Daniela

    12/34

    ".#enerarea $ermutrilor unui vectorSe citesc cele n elemente ale unui vector ade numere ntregi. S se genereze permutrile de nelemente ale mulimii {a1,a2,,an}. Simulai e"ecutareaalgoritmului pentru n=3.

    Recursiv

    type vactor=array [1..20] of integer;

    var a,x: vector; n:integer;

    procedure citire#var n: integer; var a: integer';

    var i: integer;

    egin

    !rite #$n=$'; readln#n';

    for i:= 1 to n do

    egin

    !rite#$a[$, i, $]=$'; readln #a[i]';

    end;

    end;

    procedure solutie;

    var - :integer;

    egin

    for i := 1 to n do

    !rite #a [x [i] ], & $'; !riteln;

    end;

  • 7/26/2019 Albu Daniela

    13/34

    function continuare #): integer': oolean;

    var i:integer;

    egin

    continuare := true;

    for i:= 1 to )*1 do

    if x[i]=x[)] t"en continuare:= false;end;

    procedure ac) #):integer';

    var i: integer;

    egin

    if #)=n1' t"en solutie

    else for i:= 1 to n do

    egin

    x[)]:=-;

    if continuare #)' t"en ac) # )1';

    end;

    end;

    egin

    citire#n,a';

    ac)#1';

    end.

  • 7/26/2019 Albu Daniela

    14/34

    Rezolvare pentru n=3

    = 3 = 2 % 3= %

    #1,2,3' #2,1,3' #3,1,2'

    #1,3,2' #2,3,1' #3,2,1'

  • 7/26/2019 Albu Daniela

    15/34

    %.#enerarea aran&amentelor de n elemente luate c'te $ ale unui vectorSe citesc cele n elemente ale unui vector i numrul natural p. S se genereze toate aranjamentele de n elemente luate cte p ale mulimii {a1,a2,,an}. Simulai e"ecutarea algoritmului pentru n=4 i p=2.

    o Recursiv

    type vector=array [1..20] of integer;

    var x: integer;

    n,p: integer;

    procedure solutie

    var i: integer;

    egin

    for i:=1 to p do

    !rite #x[i], $ $];

    end;

    function continuare # ):integer': oolean;var i:integer;

    egin

    continuare := true;

    for i:=1 to )*1 do

    if x[i]=x[)] t"en continuare := false;

    end;

  • 7/26/2019 Albu Daniela

    16/34

    procedure ac) #): integer';

    var i: integer;

    eginif #)=p1' t"en solutie

    else for i:=1 to n do

    egin

    x[)]:=-;

    if continuare #)' t"en ac)#)1'; end;

    end;

    egin

    !rite #$n=$'; readln#n';

    !rite #$p=$'; readln#p';

    ac)#1';

    end.

  • 7/26/2019 Albu Daniela

    17/34

    Rezolvare pentru n=4sip=2

    = = = = = 12

    #1,2' #2,1' #3,1' #5,1'

    #1,3' #2,3' #3,2' #5,2'

    #1,5' #2,5' #3,5' #5,3'

  • 7/26/2019 Albu Daniela

    18/34

    (.#enerarea combinrilor de n elemente luate c'te $ ale unui vectorSe citesc cele nelemente ale unui vector i numrul natural p. S se genereze toate combinrile de n elemente luate cte p ale mulimii{a 1,a2,,an}. Simulai e"ecutarea algoritmului pentru n=4 i p=2.

    o Recursiv

    type vector=array [0..20] of integer;

    var x:vector;

    n,p: integer;

    procedure solutie;

    var i: integer;

    egin for i:= 1 to p do

    !rite #x[i], $ $';

    !riteln;

    end;

  • 7/26/2019 Albu Daniela

    19/34

    procedure ac) #):integer';

    var i:integer;

    egin if #)=p1' t"en solutie

    else for i:= x[)*1] 1 to n do

    egin

    x [)]:= i;

    ac) #)1';

    end;

    end;

    egin

    !rite #$n=$'; readln#n';

    !rite #$p=$'; readln#p';

    ac)#1';

    end.

  • 7/26/2019 Albu Daniela

    20/34

    Rezolvare pentru n=4sip=2

    = = = = %

    #1,2' #2,3'

    #1,3' #2,5'

    #1,5' #3,5'

    ) #enerarea $artiiilor

  • 7/26/2019 Albu Daniela

    21/34

    ).#enerarea $artiiilorie mulimea A={1,2,,n} Se numete partiie a mulimii A, un set de !nmulimi care ndeplines ccondiiile de mai jos#a" A1#A2##A!=A

    b" AiA

    j=, i,j{1,2,,n}

    o -terativ

    var sol: array [0..10] of integer;

    n,i, j,ax: integer;

    procedure tipar;

    egin

    ax:=1;

    for i:=2 to n do

    if ax/ sol[i] t"en ax:= sol[i];

    !riteln#$artitie&'; for i:=1 to ax do

    egin

    for j:=1 to n do

    if sol[j]=1 t"en !rite#j, & $';

    !riteln;

    end;

    procedure ac) #):integer';

  • 7/26/2019 Albu Daniela

    22/34

    procedure ac) #):integer';

    var i, j, axprec: integer;

    egin

    if )=n1 t"en tipar

    else egin axprec:=0;

    for j:=1 to )*1 do

    if axprec/ sol[j] t"en axprec:= sol[j];

    for i:=1 to axprec1 do

    egin sol [)]:=i;

    ac)#)1'

    end;

    end;

    end;

    egin

    !rite#$n=$'; readln#n';

    ac)#1';

    end.

  • 7/26/2019 Albu Daniela

    23/34

    2.#R*LE

    + i t 1%

  • 7/26/2019 Albu Daniela

    24/34

    +arianta 1%

    $n algoritm genereaz n ordinecresctoare toate numerele de n cifre,

    folosind doar cifrele%, & i '. (acpentru n)&, primele & soluii generatesunt %%%%%, %%%%&, %%%%',%%%&%,%%%&&, precizai care sunt ultimele %soluii generate, n ordinea generrii.

    $e%ol&are'

    ,ltimele trei solutii generate inordinea generarii sunt- ((((3((((" (((((.

    +arianta 1(

    $n algoritm genereaz n ordinedescresctoare toate numerele de &cifre, fiecare dintre ele avnd cifrele

    n ordine strict cresctoare. *tiind cprimele & soluii generate sunt&+'-,!+'-, !&'-, !&+-, !&+'-,precizai care sunt ultimele % soluiigenerate, n ordinea generrii.

    $e%ol&are'

    ,ltimele trei solutii generate in

    ordinea generarii sunt- 123(123% 123".

    + i t 1/

  • 7/26/2019 Albu Daniela

    25/34

    +arianta 1/

    $n algoritm genereaz n ordine

    cresctoare, toate numerele de n cifre

    n/-0, cu cifre distincte,care nu audou cifre pare alturate. (ac pentrun)&, primele & soluii generate sunt12%3&, 12%3', 12%3-, 12%!&, 12%!',precizai care sunt urmtoarele %

    soluii generate,n ordinea obineriilor.

    $e%ol&are'

    ,rmtoarele 3 soluiigenerate 0n ordinea obinerii lorsunt- 13/ 13"2 13".

    +arianta 2

    $n algoritm genereaz n ordine

    descresctoare, toate numerele de ncifre n/-0, cu cifrele n ordine strict

    cresctoare, care nu au dou cifrepare

    alturate. (ac pentru n)&, primele &

    soluii generate sunt &+'-, !&'-,!&+'-, !&+', %+'-, precizai caresunt urmtoarele % soluii generate,nordinea obinerii lor.

    $e%ol&are'

    ,rmtoarele 3 soluiigenerate0n ordinea obinerii lorsunt- 3"()/ 3"%)/ 3"%(/.

    +arianta 21

  • 7/26/2019 Albu Daniela

    26/34

    +arianta 21

    $rmtoarele probleme se refer lamulimea de numere reale 4)5"1,

    "3, 6, "n7 n812220.9are dintreacestea, comparativ cu celelalte,admite un algoritm care se ncheiedup un numr minim de pai:

    $e%ol&are'

    c. determinarea elementuluiminim al mulimii M

    +arianta 22

    ;n timpul procesului de generare apermutrilor mulimii 51,3,6,n7 prinmetoda bac

  • 7/26/2019 Albu Daniela

    27/34

    +arianta 32

    ?n vederea participrii la un concurs,elevii de la liceul sportiv au dat o prob

    de selecie, n urma creia primii + auobinut punctaje egale. ?n cte moduripoate fi format echipa selecionattiind c poate avea doar ! membri,alei dintre cei +,i c ordinea acestora

    n cadrul echipei nu conteaz:a. 3! b. %2 c. 1& d. !

    $e%ol&are'

    = = 1(

    c8 1"

    +arianta 3

    9ompletarea unui bilet de @ABApresupune colorarea a + numere dintre

    cele !-, nscrise pe bilet. A situaiestatistic pe o anumit perioad de timparat c cele mai frecvente

    numere care au fost e"trase la @ABAsunt# 3, 32, 1, %, %+, !3, !+, !. 9tebilete de + numere se pot completa

    folosind doar aceste valori, tiind cnumrul !3 va fi colorat pe fiecare bilet:

    a. 31 b. +C c. !3 d. &+

    $e%ol&are'

    ) ) 21

    a8 21

    +arianta 3) + i t

  • 7/26/2019 Albu Daniela

    28/34

    +arianta 3)

    $tilizm metoda bac

  • 7/26/2019 Albu Daniela

    29/34

    +arianta "

    $tiliznd metoda bac

  • 7/26/2019 Albu Daniela

    30/34

    +ariante "

    $tiliznd metoda bac

  • 7/26/2019 Albu Daniela

    31/34

    +arianta %/

    9onstruim anagramele unui cuvntc1c3c%c! prin generarea n ordine

    le"icografic a permutrilor indicilorliterelor cuvntului i obinemc1c3c%c! c1c3c!c% c1c%c3c! 6c!c%c1c3 c!c%c3c1. Fentru anagraEmele cuvntului pateu, dup irul

    paetu, paeut, paute cuvintele imediaturmtoare sunt#

    a. pauet i ptaeu b. ptaeu i ptaue

    c. pauet i ptaue d. ptaeu i patue

    $e%ol&are'

    paute *4 1235

    1253 *4 paute

    1325 *4 ptaeu

    a8 $auet 9i $taeu

    +arianta "(

    Se utilizeaz metoda bac

  • 7/26/2019 Albu Daniela

    32/34

    +arianta %3

    Se genereaz, prin metodabac

  • 7/26/2019 Albu Daniela

    33/34

  • 7/26/2019 Albu Daniela

    34/34

    Reali?ator:7@AB C7D-E@7Flasa :a G-*a A