Sunteți pe pagina 1din 34

METODA BACKTRACKING

1.PROBLEME

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

Recursiv
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
ok:=true;
for i:=1 to k-1 do
if (x[k]=x[i]) or ( abs(x[k] x[i]) = (k-1)) 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;.

Iterativ

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


n:integer;
function valid (k: integer): boolean;
var i: integer;
begin
valid:=true;
for i:= 1 to k-1 do
if (sol [k] = sol [i]) or (abs(sol [k] sol [i])=abs(k-1)) then
valid:=false
end;
procedure back(k:integer);
var i:integer;

begin
if k=n+1 then begin
for i:=1 to n do
write (sol [i]);writeln;
end
else begin
sol[k]:=0;
while sol [k] < n do
begin
sol [k] :=sol [k] +1;
if valid (k) then back (k+1)
end;
end;
end;
begin
write(n); readln(n);
back(1)
end.

2.Plata unei sume cu bancnote de valori date


Se dau suma S i n tipuri de bancnote avnd valori a1,a2,,an lei. Se cer toate
modalitile de plat a sumei S utiliznd aceste bancnote. Se presupune c se
dispune de un numr suficient din fiecare tip de bancnot.
o

Recursiv

const=7;
const a: array[1..n] of integer=(1,5,10,50,100,200,500);
type vector= array [1..n] of integer;
var x:integer;
suma, s: integer;
procedure solutie;
var i: integer;
begin
for i:=1 to n do
if x[i] >0 then write (x[i], bacnote de, a [i], lei);
writeln (============);
end;
function continuare (k:integer): boolean;
begin
continuare:=(x [k]* a [k] + s < suma) and (k<=n);
end;

procedure back (k:integer): integer;


begin
if ( s= suma) then solutie
else begin
x[k]:=1;
while continuare(k) do
begin
x[k]:=x [k]+1
s:=s+x[k]*a[k];
back(k+1);
s:=s-x [k] *a [k];
end;
end;
end;
begin
write (suma=); readln (suma);
back(1);
readln(1);
end.

3.Problema colorrii hrilor


Fiind data o hart cu n ri, se cere toate soluiile de colorare a hrii, utiliznd cel
mult 4 culori, astfel nct dou ri cu frontier comun s fie colorate diferit.
o

Recursiv

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
for i:=1 to n do
writeln (tara, I, :, c [x [i]]);
end;

funtion 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]:=1;
if continuare (k) then back (k+1);
end;
end;
begin
citire (n,a);
back(1);
end;.

4.Sritura calului
Se consider o tabl de ah nxn i un cal plasa t ncolul din stnga, sus. Se cere
s se afieze un drum al calului pe table de ah, astfel nct s treac o singur
dat prin fiecare ptrat al tablei.
o

Recursiv

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


matrice=array [1..20,1..20] of integer;
coust 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
begin
for i:=1 to n do
write (a[I,j], ); writeln;
end;
end;
function continuare (k:integer):boolean;
var ok: boolean;
begin
ok::=true;
if (x [k]<1) or (x [k]>n) or (y [k]<1) or (y [k]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= n*n+1) then solutie
else begin
for i:= 1 to 8 do
begin
x [k]:= x [k-1] +dx [i];
y [k]:= y [k-1] +dy [i] ;
a [x [k],y [k] ]:=k;
if contiuare (k) then begin
back(k+1);
a [x [k], y [k] ]:=0;
end;
end;
end;
end;
begin
write(n=); readln(n);
x[i]:=1; y[1]:=1; a[1,1]:=1;
back (2);
end.

5.Generarea permutrilor unui vector


Se citesc cele n elemente ale unui vector a de numere ntregi. S se genereze permutrile de n elemente ale mulimii {a1,a2,,an}. Simulai executarea
algoritmului 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;
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;

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.

Rezolvare pentru n=3


= 3! = 2 * 3= 6
(1,2,3)
(1,3,2)

(2,1,3) (3,1,2)
(2,3,1) (3,2,1)

6.Generarea aranjamentelor de n elemente luate cte p ale unui vector


Se citesc cele n elemente ale unui vector i numrul natural p. S se genereze toate aranjamentele de n elemente luate cte p ale mulimii {a 1,a2,,an}. Simulai executarea algoritmului pentru n=4 i p=2.

Recursiv

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


var x: integer;
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;

procedure back (k: integer);


var i: integer;
begin
if (k=p+1) then solutie
else for i:=1 to n do
begin
x[k]:=I;
if continuare (k) then back(k+1);
end;
end;
begin
write (n=); readln(n);
write (p=); readln(p);
back(1);
end.

Rezolvare pentru n=4 si


p=2
=
(1,2)
(1,3)
(1,4)

(2,1)
(2,3)
(2,4)

=
(3,1)
(3,2)
(3,4)

= = 12
(4,1)
(4,2)
(4,3)

7.Generarea combinrilor de n elemente luate cte p ale unui vector


Se citesc cele n elemente 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 executarea algoritmului pentru n=4 i p=2.

Recursiv

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
begin
x [k]:= i;
back (k+1);
end;
end;
begin
write (n=); readln(n);
write (p=); readln(p);
back(1);
end.

Rezolvare pentru n=4 si


p=2
=
(1,2)
(1,3)
(1,4)

=
(2,3)
(2,4)
(3,4)

=6

8.Generarea partiiilor
Fie mulimea A={1,2,,n}. Se numete partiie a mulimii A, un set de kn
mulimi care ndeplines ccondiiile de mai jos:
a) A1UA2UUAk=A
b) AiAj=, i,j{1,2,,n}
o

Iterativ

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


n,i, j,max: integer;
procedure tipar;
begin
max:=1;
for i:=2 to n do
if max< sol[i] then max:= sol[i];
writeln(Partitie);
for i:=1 to max do
begin
for j:=1 to n do
if sol[j]=1 then write(j, );
writeln;
end;

procedure back (k:integer);


var i, j, maxprec: integer;
begin
if k=n+1 then tipar
else begin
maxprec:=0;
for j:=1 to k-1 do
if maxprec< sol[j] then maxprec:= sol[j];
for i:=1 to maxprec+1 do
begin
sol [k]:=i;
back(k+1)
end;
end;
end;
begin
write(n=); readln(n);
back(1);
end.

2.GRILE

Varianta 16
Un algoritm genereaz n ordine
cresctoare toate numerele de n cifre,
folosind doar cifrele3, 5 i 7. Dac
pentru n=5, primele 5 soluii generate
sunt 33333, 33335, 33337,33353,
33355, precizai care sunt ultimele 3
soluii generate, n ordinea generrii.

Rezolvare:
Ultimele trei solutii generate in
ordinea generarii sunt: 77773,
77775, 77777.

Varianta 17
Un algoritm genereaz n ordine
descresctoare toate numerele de 5
cifre, fiecare dintre ele avnd cifrele
n ordine strict cresctoare. tiind c
primele 5 soluii generate sunt
56789,46789, 45789, 45689, 45679,
precizai care sunt ultimele 3 soluii
generate, n ordinea generrii.
Rezolvare:
Ultimele trei solutii generate in
ordinea generarii sunt: 12347,
12346, 12345.

Varianta 19
Un algoritm genereaz n ordine
cresctoare, toate numerele de n cifre
(n<9), cu cifre distincte,care nu au
dou cifre pare alturate. Dac pentru
n=5, primele 5 soluii generate sunt
10325, 10327, 10329, 10345, 10347,
precizai care sunt urmtoarele 3
soluii generate,n ordinea obinerii
lor.
Rezolvare:
Urmtoarele 3 soluii
generate n ordinea obinerii lor
sunt: 10349, 10352, 10354.

Varianta 20
Un algoritm genereaz n ordine
descresctoare, toate numerele de n
cifre (n<9), cu cifrele n ordine strict
cresctoare, care nu au dou cifre
pare
alturate. Dac pentru n=5, primele 5
soluii generate sunt 56789, 45789,
45679, 45678, 36789, precizai care
sunt urmtoarele 3 soluii generate,n
ordinea obinerii lor.
Rezolvare:
Urmtoarele 3 soluii
generate,n ordinea obinerii lor
sunt: 35789, 35689, 35679.

Varianta 21
Urmtoarele probleme se refer la
mulimea de numere reale M={x1,
x2, , xn} (n>1000).Care dintre
acestea, comparativ cu celelalte,
admite un algoritm care se ncheie
dup un numr minim de pai?
Rezolvare:
c. determinarea elementului
minim al mulimii M

Varianta 22
In timpul procesului de generare a
permutrilor mulimii {1,2,,n} prin
metoda backtracking, n tabloul
unidimensional x este plasat un
element xk (1kn). Acesta este
considerat valid dac este ndeplinit
condiia:
Rezolvare:
a. xk{x1, x2, , xk-1}

Varianta 34

Varianta 32
n vederea participrii la un concurs,
elevii de la liceul sportiv au dat o prob
de selecie, n urma creia primii 6 au
obinut punctaje egale. n cte moduri
poate fi format echipa selecionat
tiind c poate avea doar 4 membri,
alei dintre cei 6,i c ordinea acestora
n cadrul echipei nu conteaz?
a. 24 b. 30 c. 15 d. 4
Rezolvare:

Completarea unui bilet de LOTO


presupune colorarea a 6 numere dintre
cele 49, nscrise pe bilet. O situaie
statistic pe o anumit perioad de timp
arat c cele mai frecvente
numere care au fost extrase la LOTO
sunt: 2, 20, 18, 38, 36, 42, 46, 48. Cte
bilete de 6 numere se pot completa
folosind doar aceste valori, tiind c
numrul 42 va fi colorat pe fiecare bilet?
a. 21 b. 6! c. 42 d. 56
Rezolvare:

= 15
=

= 21

c) 15
a) 21

Varianta 38
Utilizm metoda backtracking pentru
generarea tuturor modalitilor de a
scrie numrul 9 ca sum a cel puin
dou numere naturale nenule distincte.
Termenii fiecrei sume sunt n ordine
strict cresctoare. Soluiile 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 aceeai
metod pentru scrierea lui 8.Cte soluii
vor fi generate?
a. 3 b. 4 c. 6 d. 5

Varianta 40
Utilizm metoda backtracking pentru
generarea tuturor modalitilor de a
scrie numrul 6 ca sum a cel puin
dou numere naturale nenule. Termenii
fiecrei sume sunt n ordine
cresctoare. Soluiile 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 aceeai metod
pentru scrierea lui 9. Cte soluii de
forma 2+... vor fi generate? (4p.)
a. 2 b. 3 c. 4 d. 5

Rezolvare:

Rezolvare:
1+2+5
1+3+4
1+7 d) 5
2+6
3+5

2+2+2+3
2+2+5
2+3+4
2+7

c) 4

Varianta 45
Utiliznd metoda backtracking se
genereaz toate cuvintele de cte 3
litere din mulimea {a,b,c}. Dac
primele patru cuvinte generate sunt,
n acest ordine: aaa, aab, aac, aba,
care este cel de-al optulea cuvnt
generat?
a. acb b. acc c. aca d. bca
Rezolvare:
5. abb
6. abc
7. aca
8. acb
a) acb

Varianta 49
Se genereaz n ordine strict
cresctoare numerele de cte ase
cifre care conin: cifra 1 o singur
dat, cifra 2 de dou ori i cifra 3 de
trei ori. Se obin, n aceast ordine,
numerele: 122333, 123233, 123323,
, 333221. Cte numere generate
prin aceast me-tod au prima cifr 1
i ultima cifr 2?
a. 1 b. 3 c. 4 d. 8
Rezolvare:
123332
132332
133232
133322
c) 4

Variante 54
Utiliznd metoda backtracking se
genereaz n ordine lexicografic toate
anagramele cuvntului caiet ( cuvinte
formate din aceleai litere, eventual n
alt ordine). Care este a asea soluie?
a. catei b. actie c. actei d. catie
Rezolvare:
caiet -> 12345
1. 12345
2. 12354
3. 12435
4. 12453
5. 12534
6. 12543
a) catei

Varianta 74
Prin metoda backtracking se genereaz toate anagramele (cuvintele obinute prin permutarea literelor )unui
cuvnt dat.tiind c se aplic aceast
metod pentru cuvntul solar,precizai
cte cuvinte se vor genera astfel nct
prima i ultima liter din fiecare cu-vnt
generat s fie vocal(sunt consi-derate
vocale caracterele a, e, i , o, u)?
a. 24 b. 6 c. 10 d. 12
Rezolvare:
aslro asrlo
arslo arlso
alrso alsro
6*2=12

d) 12

Varianta 69
Construim anagramele unui cuvnt
c1c2c3c4 prin generarea n ordine
lexicografic a permutrilor indicilor
literelor cuvntului i obinem
c1c2c3c4 c1c2c4c3 c1c3c2c4
c4c3c1c2 c4c3c2c1. Pentru anagramele cuvntului pateu, dup irul
paetu, paeut, paute cuvintele imediat
urmtoare sunt:
a. pauet i ptaeu b. ptaeu i ptaue
c. pauet i ptaue d. ptaeu i patue

Varianta 57
Se utilizeaz metoda backtracking
pentru a genera n ordine
lexicografic toate cuvintele de cte
patru litere din mulimea {d,a,n,s},
astfel nct n niciun cuvnt s nu
existe dou litere alturate identice.
tiind c primele trei cuvinte generate
sunt, n ordine, adad, adan i adas,
care va fi ultimul cuvnt obinut?
a. snns b. nsns c. snsn d. dans

Rezolvare:

Rezolvare:
paute -> 12534
12543 -> paute
13245 -> ptaeu
a) pauet i ptaeu

adad, adam, adas,..., snsn


c) snsn

Varianta 63
Se genereaz, prin metoda
backtracking, toate partiiile mulimii
A={1,2,3} obinndu-se urmtoarele
soluii:{1}{2}{3};{1}{2,3};{1,3}
{2};{1,2}{3};{1,2,3}. Se observ c
dintre acestea prima soluie e alctuit
din exact trei submulimi.Dac se
folo-sete aceeai metod pentru a genera partiiile mulimii {1,2,3,4} stabilii cte dintre soluiile generate vor
fi alctuite din exact trei submulimi.
a.3 b.12 c. 6 d.5
Rezolvati:
{1,2}{3}{4}; {1}{2,3}{4}; {1}{2}
{3,4}
a) 3

Varianta 70
Pentru rezolvarea crei probleme
dintre cele enumerate mai jos se poate
utiliza metoda backtracking ?
a. determinarea reuniunii a 3 mulimi
b. determinarea tuturor divizorilor unui
numr din 3 cifre
c. determinarea tuturor elementelor mai
mici dect 30000 din irul lui Fibonacci
d. determinarea tuturor variantelor n care
se pot genera steagurile cu 3 culori (din
mulimea:rou, galben, albastru i
alb), avnd la mijloc culoarea galben
Rezolvare:
d. determinarea tuturor variantelor
n care se pot genera steagurile cu
3 culori (din mulimea:rou,
galben, albastru i alb),
avnd la mijloc culoarea galben

Varianta 58
Se utilizeaz metoda backtracking
pentru a genera n ordine
lexicografic toate cuvintele de cte
trei litere distincte din mulimea
{d,a,n,s}. Care este cel de-al treilea
cuvnt obinut?
a. ads b. ans c. dan d. and
Rezolare:
1. adn
2. ads
3. ans

Varianta 55
Se genereaz n ordine cresctoare,
toate numerele naturale de 5 cifre
distincte, care se pot forma cu cifrele
2,3,4,5 i 6. S se precizeze numrul
generat imediat naintea i numrul
generat imediat dup secvena urmtoare : 34256, 34265, 34526, 34562.
a. 32645 i 34625 b. 32654 i 34655
c. 32654 i 34625 d. 32645 i 34655
Rezolvare:

b) ans

34256 -> 23145 => 32654, 34256


34562 -> 23451 => 34561, 34625
c) 32654 si 34625

Realizator: ALBU DANIELA


Clasa : a XI-a B

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