Upload
lascau-ionut-sebastian
View
232
Download
0
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