Sunteți pe pagina 1din 32

Problemă. Mihai pleacă în călătorie.

El are un geamantan în care va lua câteva lucruri necesare pentru el


în călătorie. Ajutați-l pe Mihai să-și facă bagajele.

Rezolvare:

Obiecte={ o 1 ,o 2 , … , o n }

Solutii:

Problemă. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru el
în călătorie. Ajutați-l pe Mihai să-și facă bagajele.

Rezolvare:

Obiecte={ o 1 ,o 2 , … , o n }

Solutii:

Varianta 1 – {}

Varianta 2 – {o 1}, {o 2}, …, {o n}

Varianta 3 –{ o 1 , o 2}, {o 1 , o 3}, …, {o n−1 , o n}

….

Varianta n - { o 1 ,o 2 , … , o n }

Cazul 3. Lungimea soluției este diferită, iar pe nivele diferite în stivă sunt valori din aceeași mulțime.

Pentru generarea soluțiilor vom ține cont de următoarele raționamente:

{1,2,3}={1,3,2}={2,1,3}={2,3,1}={3,1,2}={3,2,1}

Vom lua la bază algoritmul pentru permutări.

Completăm stiva: n=3

{1} – soluție finală, tipar, urca in stiva

{1,1} – solutie partiala invalida, se afla pe nivelul 2 in stiva

{1,2} - soluție finală, tipar, urca in stiva

{1,2,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,2} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,3} - soluție finală, tipar, pe ultimul nivel in stiva au fost depuse toate valorile, coboara in stiva
{1,3} - soluție finală, tipar, urca in stiva

{1,3,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,3,2} = {1,2,3}

Ca să evităm acest lucru vom completa stiva în ordine crescătoare: {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}
plus mulțimea vidă.

În total avem 2n submulțimi.

Pentru n=4 vom avea submulțimile: {1}, {2}, {3}, {4}, {1,2}, {1,3}, {1,4}, {2,3},{2,4}, }, {3,4}, {1,2,3},
{1,2,4}, {1,3,4}, {2,3,4}, {1,2,3,4} plus mulțimea vidă.

Programul Pascal:

Fincția Valid – fictivă;

Program backtracking_submultimile_unei_multimi; {recursiv}


uses crt;
type vector=array[0..25] of integer;
var st:vector;
n:integer;
Procedure initial;
var i:integer;
begin
write('Introdu n=');
readln(n);
writeln('Submultimile unei multimi din ',n,' elemente : ');
for i:=1 to n do st[i]:=0;
end;
Function valid(p:integer):boolean;
begin
valid:=true;
end;
Procedure tipar(p:integer);
var i:integer;
begin
for i:=1 to p do
write(st[i]:2,' ');
writeln;
end;
Procedure backtr(p:integer);
var pval:integer;
begin
for pval:=st[p-1]+1 to n do
begin
st[p]:=pval;
if valid(p) then
begin
tipar(p);
backtr(p+1);
end;
end;
end;
Begin
clrscr;
initial;
backtr(1);
readkey;
End.

Pentru acasă:

Problema 1. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w .

Problema 2. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w , iar capacitatea bagajului este S.

Problemă. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru el
în călătorie. Ajutați-l pe Mihai să-și facă bagajele.

Rezolvare:

Obiecte={ o 1 ,o 2 , … , o n }

Solutii:

Varianta 1 – {}

Varianta 2 – {o 1}, {o 2}, …, {o n}


Varianta 3 –{ o 1 , o 2}, {o 1 , o 3}, …, {o n−1 , o n}

….

Varianta n - { o 1 ,o 2 , … , o n }

Cazul 3. Lungimea soluției este diferită, iar pe nivele diferite în stivă sunt valori din aceeași mulțime.

Pentru generarea soluțiilor vom ține cont de următoarele raționamente:

{1,2,3}={1,3,2}={2,1,3}={2,3,1}={3,1,2}={3,2,1}

Vom lua la bază algoritmul pentru permutări.

Completăm stiva: n=3

{1} – soluție finală, tipar, urca in stiva

{1,1} – solutie partiala invalida, se afla pe nivelul 2 in stiva

{1,2} - soluție finală, tipar, urca in stiva

{1,2,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,2} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,3} - soluție finală, tipar, pe ultimul nivel in stiva au fost depuse toate valorile, coboara in stiva

{1,3} - soluție finală, tipar, urca in stiva

{1,3,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,3,2} = {1,2,3}

Ca să evităm acest lucru vom completa stiva în ordine crescătoare: {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}
plus mulțimea vidă.

În total avem 2n submulțimi.

Pentru n=4 vom avea submulțimile: {1}, {2}, {3}, {4}, {1,2}, {1,3}, {1,4}, {2,3},{2,4}, }, {3,4}, {1,2,3},
{1,2,4}, {1,3,4}, {2,3,4}, {1,2,3,4} plus mulțimea vidă.

Programul Pascal:

Fincția Valid – fictivă;

Program backtracking_submultimile_unei_multimi; {recursiv}


uses crt;
type vector=array[0..25] of integer;
var st:vector;
n:integer;
Procedure initial;
var i:integer;
begin
write('Introdu n=');
readln(n);
writeln('Submultimile unei multimi din ',n,' elemente : ');
for i:=1 to n do st[i]:=0;
end;
Function valid(p:integer):boolean;
begin
valid:=true;
end;
Procedure tipar(p:integer);
var i:integer;
begin
for i:=1 to p do
write(st[i]:2,' ');
writeln;
end;
Procedure backtr(p:integer);
var pval:integer;
begin
for pval:=st[p-1]+1 to n do
begin
st[p]:=pval;
if valid(p) then
begin
tipar(p);
backtr(p+1);
end;
end;
end;
Begin
clrscr;
initial;
backtr(1);
readkey;
End.

Pentru acasă:

Problema 1. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w .

Problema 2. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w , iar capacitatea bagajului este S.

Problemă. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru el
în călătorie. Ajutați-l pe Mihai să-și facă bagajele.

Rezolvare:

Obiecte={ o 1 ,o 2 , … , o n }

Solutii:

Varianta 1 – {}

Varianta 2 – {o 1}, {o 2}, …, {o n}

Varianta 3 –{ o 1 , o 2}, {o 1 , o 3}, …, {o n−1 , o n}

….

Varianta n - { o 1 ,o 2 , … , o n }

Cazul 3. Lungimea soluției este diferită, iar pe nivele diferite în stivă sunt valori din aceeași mulțime.

Pentru generarea soluțiilor vom ține cont de următoarele raționamente:

{1,2,3}={1,3,2}={2,1,3}={2,3,1}={3,1,2}={3,2,1}

Vom lua la bază algoritmul pentru permutări.

Completăm stiva: n=3

{1} – soluție finală, tipar, urca in stiva

{1,1} – solutie partiala invalida, se afla pe nivelul 2 in stiva


{1,2} - soluție finală, tipar, urca in stiva

{1,2,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,2} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,3} - soluție finală, tipar, pe ultimul nivel in stiva au fost depuse toate valorile, coboara in stiva

{1,3} - soluție finală, tipar, urca in stiva

{1,3,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,3,2} = {1,2,3}

Ca să evităm acest lucru vom completa stiva în ordine crescătoare: {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}
plus mulțimea vidă.

În total avem 2n submulțimi.

Pentru n=4 vom avea submulțimile: {1}, {2}, {3}, {4}, {1,2}, {1,3}, {1,4}, {2,3},{2,4}, }, {3,4}, {1,2,3},
{1,2,4}, {1,3,4}, {2,3,4}, {1,2,3,4} plus mulțimea vidă.

Programul Pascal:

Fincția Valid – fictivă;

Program backtracking_submultimile_unei_multimi; {recursiv}


uses crt;
type vector=array[0..25] of integer;
var st:vector;
n:integer;
Procedure initial;
var i:integer;
begin
write('Introdu n=');
readln(n);
writeln('Submultimile unei multimi din ',n,' elemente : ');
for i:=1 to n do st[i]:=0;
end;
Function valid(p:integer):boolean;
begin
valid:=true;
end;
Procedure tipar(p:integer);
var i:integer;
begin
for i:=1 to p do
write(st[i]:2,' ');
writeln;
end;
Procedure backtr(p:integer);
var pval:integer;
begin
for pval:=st[p-1]+1 to n do
begin
st[p]:=pval;
if valid(p) then
begin
tipar(p);
backtr(p+1);
end;
end;
end;
Begin
clrscr;
initial;
backtr(1);
readkey;
End.

Pentru acasă:

Problema 1. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w .

Problema 2. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w , iar capacitatea bagajului este S.

Problemă. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru el
în călătorie. Ajutați-l pe Mihai să-și facă bagajele.

Rezolvare:
Obiecte={ o 1 ,o 2 , … , o n }

Solutii:

Varianta 1 – {}

Varianta 2 – {o 1}, {o 2}, …, {o n}

Varianta 3 –{ o 1 , o 2}, {o 1 , o 3}, …, {o n−1 , o n}

….

Varianta n - { o 1 ,o 2 , … , o n }

Cazul 3. Lungimea soluției este diferită, iar pe nivele diferite în stivă sunt valori din aceeași mulțime.

Pentru generarea soluțiilor vom ține cont de următoarele raționamente:

{1,2,3}={1,3,2}={2,1,3}={2,3,1}={3,1,2}={3,2,1}

Vom lua la bază algoritmul pentru permutări.

Completăm stiva: n=3

{1} – soluție finală, tipar, urca in stiva

{1,1} – solutie partiala invalida, se afla pe nivelul 2 in stiva

{1,2} - soluție finală, tipar, urca in stiva

{1,2,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,2} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,3} - soluție finală, tipar, pe ultimul nivel in stiva au fost depuse toate valorile, coboara in stiva

{1,3} - soluție finală, tipar, urca in stiva

{1,3,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,3,2} = {1,2,3}

Ca să evităm acest lucru vom completa stiva în ordine crescătoare: {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}
plus mulțimea vidă.

În total avem 2n submulțimi.

Pentru n=4 vom avea submulțimile: {1}, {2}, {3}, {4}, {1,2}, {1,3}, {1,4}, {2,3},{2,4}, }, {3,4}, {1,2,3},
{1,2,4}, {1,3,4}, {2,3,4}, {1,2,3,4} plus mulțimea vidă.
Programul Pascal:

Fincția Valid – fictivă;

Program backtracking_submultimile_unei_multimi; {recursiv}


uses crt;
type vector=array[0..25] of integer;
var st:vector;
n:integer;
Procedure initial;
var i:integer;
begin
write('Introdu n=');
readln(n);
writeln('Submultimile unei multimi din ',n,' elemente : ');
for i:=1 to n do st[i]:=0;
end;
Function valid(p:integer):boolean;
begin
valid:=true;
end;
Procedure tipar(p:integer);
var i:integer;
begin
for i:=1 to p do
write(st[i]:2,' ');
writeln;
end;
Procedure backtr(p:integer);
var pval:integer;
begin
for pval:=st[p-1]+1 to n do
begin
st[p]:=pval;
if valid(p) then
begin
tipar(p);
backtr(p+1);
end;
end;
end;
Begin
clrscr;
initial;
backtr(1);
readkey;
End.

Pentru acasă:

Problema 1. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w .

Problema 2. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w , iar capacitatea bagajului este S.

Problemă. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru el
în călătorie. Ajutați-l pe Mihai să-și facă bagajele.

Rezolvare:

Obiecte={ o 1 ,o 2 , … , o n }

Solutii:

Varianta 1 – {}

Varianta 2 – {o 1}, {o 2}, …, {o n}

Varianta 3 –{ o 1 , o 2}, {o 1 , o 3}, …, {o n−1 , o n}

….

Varianta n - { o 1 ,o 2 , … , o n }

Cazul 3. Lungimea soluției este diferită, iar pe nivele diferite în stivă sunt valori din aceeași mulțime.

Pentru generarea soluțiilor vom ține cont de următoarele raționamente:


{1,2,3}={1,3,2}={2,1,3}={2,3,1}={3,1,2}={3,2,1}

Vom lua la bază algoritmul pentru permutări.

Completăm stiva: n=3

{1} – soluție finală, tipar, urca in stiva

{1,1} – solutie partiala invalida, se afla pe nivelul 2 in stiva

{1,2} - soluție finală, tipar, urca in stiva

{1,2,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,2} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,3} - soluție finală, tipar, pe ultimul nivel in stiva au fost depuse toate valorile, coboara in stiva

{1,3} - soluție finală, tipar, urca in stiva

{1,3,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,3,2} = {1,2,3}

Ca să evităm acest lucru vom completa stiva în ordine crescătoare: {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}
plus mulțimea vidă.

În total avem 2n submulțimi.

Pentru n=4 vom avea submulțimile: {1}, {2}, {3}, {4}, {1,2}, {1,3}, {1,4}, {2,3},{2,4}, }, {3,4}, {1,2,3},
{1,2,4}, {1,3,4}, {2,3,4}, {1,2,3,4} plus mulțimea vidă.

Programul Pascal:

Fincția Valid – fictivă;

Program backtracking_submultimile_unei_multimi; {recursiv}


uses crt;
type vector=array[0..25] of integer;
var st:vector;
n:integer;
Procedure initial;
var i:integer;
begin
write('Introdu n=');
readln(n);
writeln('Submultimile unei multimi din ',n,' elemente : ');
for i:=1 to n do st[i]:=0;
end;
Function valid(p:integer):boolean;
begin
valid:=true;
end;
Procedure tipar(p:integer);
var i:integer;
begin
for i:=1 to p do
write(st[i]:2,' ');
writeln;
end;
Procedure backtr(p:integer);
var pval:integer;
begin
for pval:=st[p-1]+1 to n do
begin
st[p]:=pval;
if valid(p) then
begin
tipar(p);
backtr(p+1);
end;
end;
end;
Begin
clrscr;
initial;
backtr(1);
readkey;
End.

Pentru acasă:

Problema 1. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w .
Problema 2. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w , iar capacitatea bagajului este S.

Problemă. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru el
în călătorie. Ajutați-l pe Mihai să-și facă bagajele.

Rezolvare:

Obiecte={ o 1 ,o 2 , … , o n }

Solutii:

Varianta 1 – {}

Varianta 2 – {o 1}, {o 2}, …, {o n}

Varianta 3 –{ o 1 , o 2}, {o 1 , o 3}, …, {o n−1 , o n}

….

Varianta n - { o 1 ,o 2 , … , o n }

Cazul 3. Lungimea soluției este diferită, iar pe nivele diferite în stivă sunt valori din aceeași mulțime.

Pentru generarea soluțiilor vom ține cont de următoarele raționamente:

{1,2,3}={1,3,2}={2,1,3}={2,3,1}={3,1,2}={3,2,1}

Vom lua la bază algoritmul pentru permutări.

Completăm stiva: n=3

{1} – soluție finală, tipar, urca in stiva

{1,1} – solutie partiala invalida, se afla pe nivelul 2 in stiva

{1,2} - soluție finală, tipar, urca in stiva

{1,2,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,2} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,3} - soluție finală, tipar, pe ultimul nivel in stiva au fost depuse toate valorile, coboara in stiva

{1,3} - soluție finală, tipar, urca in stiva


{1,3,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,3,2} = {1,2,3}

Ca să evităm acest lucru vom completa stiva în ordine crescătoare: {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}
plus mulțimea vidă.

În total avem 2n submulțimi.

Pentru n=4 vom avea submulțimile: {1}, {2}, {3}, {4}, {1,2}, {1,3}, {1,4}, {2,3},{2,4}, }, {3,4}, {1,2,3},
{1,2,4}, {1,3,4}, {2,3,4}, {1,2,3,4} plus mulțimea vidă.

Programul Pascal:

Fincția Valid – fictivă;

Program backtracking_submultimile_unei_multimi; {recursiv}


uses crt;
type vector=array[0..25] of integer;
var st:vector;
n:integer;
Procedure initial;
var i:integer;
begin
write('Introdu n=');
readln(n);
writeln('Submultimile unei multimi din ',n,' elemente : ');
for i:=1 to n do st[i]:=0;
end;
Function valid(p:integer):boolean;
begin
valid:=true;
end;
Procedure tipar(p:integer);
var i:integer;
begin
for i:=1 to p do
write(st[i]:2,' ');
writeln;
end;
Procedure backtr(p:integer);
var pval:integer;
begin
for pval:=st[p-1]+1 to n do
begin
st[p]:=pval;
if valid(p) then
begin
tipar(p);
backtr(p+1);
end;
end;
end;
Begin
clrscr;
initial;
backtr(1);
readkey;
End.

Pentru acasă:

Problema 1. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w .

Problema 2. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w , iar capacitatea bagajului este S.

Problemă. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru el
în călătorie. Ajutați-l pe Mihai să-și facă bagajele.

Rezolvare:

Obiecte={ o 1 ,o 2 , … , o n }

Solutii:

Varianta 1 – {}

Varianta 2 – {o 1}, {o 2}, …, {o n}

Varianta 3 –{ o 1 , o 2}, {o 1 , o 3}, …, {o n−1 , o n}


….

Varianta n - { o 1 ,o 2 , … , o n }

Cazul 3. Lungimea soluției este diferită, iar pe nivele diferite în stivă sunt valori din aceeași mulțime.

Pentru generarea soluțiilor vom ține cont de următoarele raționamente:

{1,2,3}={1,3,2}={2,1,3}={2,3,1}={3,1,2}={3,2,1}

Vom lua la bază algoritmul pentru permutări.

Completăm stiva: n=3

{1} – soluție finală, tipar, urca in stiva

{1,1} – solutie partiala invalida, se afla pe nivelul 2 in stiva

{1,2} - soluție finală, tipar, urca in stiva

{1,2,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,2} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,3} - soluție finală, tipar, pe ultimul nivel in stiva au fost depuse toate valorile, coboara in stiva

{1,3} - soluție finală, tipar, urca in stiva

{1,3,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,3,2} = {1,2,3}

Ca să evităm acest lucru vom completa stiva în ordine crescătoare: {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}
plus mulțimea vidă.

În total avem 2n submulțimi.

Pentru n=4 vom avea submulțimile: {1}, {2}, {3}, {4}, {1,2}, {1,3}, {1,4}, {2,3},{2,4}, }, {3,4}, {1,2,3},
{1,2,4}, {1,3,4}, {2,3,4}, {1,2,3,4} plus mulțimea vidă.

Programul Pascal:

Fincția Valid – fictivă;

Program backtracking_submultimile_unei_multimi; {recursiv}


uses crt;
type vector=array[0..25] of integer;
var st:vector;
n:integer;
Procedure initial;
var i:integer;
begin
write('Introdu n=');
readln(n);
writeln('Submultimile unei multimi din ',n,' elemente : ');
for i:=1 to n do st[i]:=0;
end;
Function valid(p:integer):boolean;
begin
valid:=true;
end;
Procedure tipar(p:integer);
var i:integer;
begin
for i:=1 to p do
write(st[i]:2,' ');
writeln;
end;
Procedure backtr(p:integer);
var pval:integer;
begin
for pval:=st[p-1]+1 to n do
begin
st[p]:=pval;
if valid(p) then
begin
tipar(p);
backtr(p+1);
end;
end;
end;
Begin
clrscr;
initial;
backtr(1);
readkey;
End.
Pentru acasă:

Problema 1. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w .

Problema 2. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w , iar capacitatea bagajului este S.

Problemă. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru el
în călătorie. Ajutați-l pe Mihai să-și facă bagajele.

Rezolvare:

Obiecte={ o 1 ,o 2 , … , o n }

Solutii:

Varianta 1 – {}

Varianta 2 – {o 1}, {o 2}, …, {o n}

Varianta 3 –{ o 1 , o 2}, {o 1 , o 3}, …, {o n−1 , o n}

….

Varianta n - { o 1 ,o 2 , … , o n }

Cazul 3. Lungimea soluției este diferită, iar pe nivele diferite în stivă sunt valori din aceeași mulțime.

Pentru generarea soluțiilor vom ține cont de următoarele raționamente:

{1,2,3}={1,3,2}={2,1,3}={2,3,1}={3,1,2}={3,2,1}

Vom lua la bază algoritmul pentru permutări.

Completăm stiva: n=3

{1} – soluție finală, tipar, urca in stiva

{1,1} – solutie partiala invalida, se afla pe nivelul 2 in stiva

{1,2} - soluție finală, tipar, urca in stiva

{1,2,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva


{1,2,2} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,3} - soluție finală, tipar, pe ultimul nivel in stiva au fost depuse toate valorile, coboara in stiva

{1,3} - soluție finală, tipar, urca in stiva

{1,3,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,3,2} = {1,2,3}

Ca să evităm acest lucru vom completa stiva în ordine crescătoare: {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}
plus mulțimea vidă.

În total avem 2n submulțimi.

Pentru n=4 vom avea submulțimile: {1}, {2}, {3}, {4}, {1,2}, {1,3}, {1,4}, {2,3},{2,4}, }, {3,4}, {1,2,3},
{1,2,4}, {1,3,4}, {2,3,4}, {1,2,3,4} plus mulțimea vidă.

Programul Pascal:

Fincția Valid – fictivă;

Program backtracking_submultimile_unei_multimi; {recursiv}


uses crt;
type vector=array[0..25] of integer;
var st:vector;
n:integer;
Procedure initial;
var i:integer;
begin
write('Introdu n=');
readln(n);
writeln('Submultimile unei multimi din ',n,' elemente : ');
for i:=1 to n do st[i]:=0;
end;
Function valid(p:integer):boolean;
begin
valid:=true;
end;
Procedure tipar(p:integer);
var i:integer;
begin
for i:=1 to p do
write(st[i]:2,' ');
writeln;
end;
Procedure backtr(p:integer);
var pval:integer;
begin
for pval:=st[p-1]+1 to n do
begin
st[p]:=pval;
if valid(p) then
begin
tipar(p);
backtr(p+1);
end;
end;
end;
Begin
clrscr;
initial;
backtr(1);
readkey;
End.

Pentru acasă:

Problema 1. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w .

Problema 2. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w , iar capacitatea bagajului este S.

Varianta 1 – {}

Varianta 2 – {o 1}, {o 2}, …, {o n}


Varianta 3 –{ o 1 , o 2}, {o 1 , o 3}, …, {o n−1 , o n}

….

Varianta n - { o 1 ,o 2 , … , o n }

Cazul 3. Lungimea soluției este diferită, iar pe nivele diferite în stivă sunt valori din aceeași mulțime.

Pentru generarea soluțiilor vom ține cont de următoarele raționamente:

{1,2,3}={1,3,2}={2,1,3}={2,3,1}={3,1,2}={3,2,1}

Vom lua la bază algoritmul pentru permutări.

Completăm stiva: n=3

{1} – soluție finală, tipar, urca in stiva

{1,1} – solutie partiala invalida, se afla pe nivelul 2 in stiva

{1,2} - soluție finală, tipar, urca in stiva

{1,2,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,2} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,3} - soluție finală, tipar, pe ultimul nivel in stiva au fost depuse toate valorile, coboara in stiva

{1,3} - soluție finală, tipar, urca in stiva

{1,3,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,3,2} = {1,2,3}

Ca să evităm acest lucru vom completa stiva în ordine crescătoare: {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}
plus mulțimea vidă.

În total avem 2n submulțimi.

Pentru n=4 vom avea submulțimile: {1}, {2}, {3}, {4}, {1,2}, {1,3}, {1,4}, {2,3},{2,4}, }, {3,4}, {1,2,3},
{1,2,4}, {1,3,4}, {2,3,4}, {1,2,3,4} plus mulțimea vidă.

Programul Pascal:

Fincția Valid – fictivă;

Program backtracking_submultimile_unei_multimi; {recursiv}


uses crt;
type vector=array[0..25] of integer;
var st:vector;
n:integer;
Procedure initial;
var i:integer;
begin
write('Introdu n=');
readln(n);
writeln('Submultimile unei multimi din ',n,' elemente : ');
for i:=1 to n do st[i]:=0;
end;
Function valid(p:integer):boolean;
begin
valid:=true;
end;
Procedure tipar(p:integer);
var i:integer;
begin
for i:=1 to p do
write(st[i]:2,' ');
writeln;
end;
Procedure backtr(p:integer);
var pval:integer;
begin
for pval:=st[p-1]+1 to n do
begin
st[p]:=pval;
if valid(p) then
begin
tipar(p);
backtr(p+1);
end;
end;
end;
Begin
clrscr;
initial;
backtr(1);
readkey;
End.

Pentru acasă:

Problema 1. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w .

Problema 2. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w , iar capacitatea bagajului este S.

Problemă. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru el
în călătorie. Ajutați-l pe Mihai să-și facă bagajele.

Rezolvare:

Obiecte={ o 1 ,o 2 , … , o n }

Solutii:

Varianta 1 – {}

Varianta 2 – {o 1}, {o 2}, …, {o n}

Varianta 3 –{ o 1 , o 2}, {o 1 , o 3}, …, {o n−1 , o n}

….

Varianta n - { o 1 ,o 2 , … , o n }

Cazul 3. Lungimea soluției este diferită, iar pe nivele diferite în stivă sunt valori din aceeași mulțime.

Pentru generarea soluțiilor vom ține cont de următoarele raționamente:

{1,2,3}={1,3,2}={2,1,3}={2,3,1}={3,1,2}={3,2,1}

Vom lua la bază algoritmul pentru permutări.

Completăm stiva: n=3

{1} – soluție finală, tipar, urca in stiva

{1,1} – solutie partiala invalida, se afla pe nivelul 2 in stiva


{1,2} - soluție finală, tipar, urca in stiva

{1,2,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,2} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,3} - soluție finală, tipar, pe ultimul nivel in stiva au fost depuse toate valorile, coboara in stiva

{1,3} - soluție finală, tipar, urca in stiva

{1,3,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,3,2} = {1,2,3}

Ca să evităm acest lucru vom completa stiva în ordine crescătoare: {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}
plus mulțimea vidă.

În total avem 2n submulțimi.

Pentru n=4 vom avea submulțimile: {1}, {2}, {3}, {4}, {1,2}, {1,3}, {1,4}, {2,3},{2,4}, }, {3,4}, {1,2,3},
{1,2,4}, {1,3,4}, {2,3,4}, {1,2,3,4} plus mulțimea vidă.

Programul Pascal:

Fincția Valid – fictivă;

Program backtracking_submultimile_unei_multimi; {recursiv}


uses crt;
type vector=array[0..25] of integer;
var st:vector;
n:integer;
Procedure initial;
var i:integer;
begin
write('Introdu n=');
readln(n);
writeln('Submultimile unei multimi din ',n,' elemente : ');
for i:=1 to n do st[i]:=0;
end;
Function valid(p:integer):boolean;
begin
valid:=true;
end;
Procedure tipar(p:integer);
var i:integer;
begin
for i:=1 to p do
write(st[i]:2,' ');
writeln;
end;
Procedure backtr(p:integer);
var pval:integer;
begin
for pval:=st[p-1]+1 to n do
begin
st[p]:=pval;
if valid(p) then
begin
tipar(p);
backtr(p+1);
end;
end;
end;
Begin
clrscr;
initial;
backtr(1);
readkey;
End.

Pentru acasă:

Problema 1. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w .

Problema 2. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w , iar capacitatea bagajului este S.

Problemă. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru el
în călătorie. Ajutați-l pe Mihai să-și facă bagajele.

Rezolvare:
Obiecte={ o 1 ,o 2 , … , o n }

Solutii:

Varianta 1 – {}

Varianta 2 – {o 1}, {o 2}, …, {o n}

Varianta 3 –{ o 1 , o 2}, {o 1 , o 3}, …, {o n−1 , o n}

….

Varianta n - { o 1 ,o 2 , … , o n }

Cazul 3. Lungimea soluției este diferită, iar pe nivele diferite în stivă sunt valori din aceeași mulțime.

Pentru generarea soluțiilor vom ține cont de următoarele raționamente:

{1,2,3}={1,3,2}={2,1,3}={2,3,1}={3,1,2}={3,2,1}

Vom lua la bază algoritmul pentru permutări.

Completăm stiva: n=3

{1} – soluție finală, tipar, urca in stiva

{1,1} – solutie partiala invalida, se afla pe nivelul 2 in stiva

{1,2} - soluție finală, tipar, urca in stiva

{1,2,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,2} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,3} - soluție finală, tipar, pe ultimul nivel in stiva au fost depuse toate valorile, coboara in stiva

{1,3} - soluție finală, tipar, urca in stiva

{1,3,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,3,2} = {1,2,3}

Ca să evităm acest lucru vom completa stiva în ordine crescătoare: {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}
plus mulțimea vidă.

În total avem 2n submulțimi.

Pentru n=4 vom avea submulțimile: {1}, {2}, {3}, {4}, {1,2}, {1,3}, {1,4}, {2,3},{2,4}, }, {3,4}, {1,2,3},
{1,2,4}, {1,3,4}, {2,3,4}, {1,2,3,4} plus mulțimea vidă.
Programul Pascal:

Fincția Valid – fictivă;

Program backtracking_submultimile_unei_multimi; {recursiv}


uses crt;
type vector=array[0..25] of integer;
var st:vector;
n:integer;
Procedure initial;
var i:integer;
begin
write('Introdu n=');
readln(n);
writeln('Submultimile unei multimi din ',n,' elemente : ');
for i:=1 to n do st[i]:=0;
end;
Function valid(p:integer):boolean;
begin
valid:=true;
end;
Procedure tipar(p:integer);
var i:integer;
begin
for i:=1 to p do
write(st[i]:2,' ');
writeln;
end;
Procedure backtr(p:integer);
var pval:integer;
begin
for pval:=st[p-1]+1 to n do
begin
st[p]:=pval;
if valid(p) then
begin
tipar(p);
backtr(p+1);
end;
end;
end;
Begin
clrscr;
initial;
backtr(1);
readkey;
End.

Pentru acasă:

Problema 1. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w .

Problema 2. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w , iar capacitatea bagajului este S.

Problemă. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru el
în călătorie. Ajutați-l pe Mihai să-și facă bagajele.

Rezolvare:

Obiecte={ o 1 ,o 2 , … , o n }

Solutii:

Varianta 1 – {}

Varianta 2 – {o 1}, {o 2}, …, {o n}

Varianta 3 –{ o 1 , o 2}, {o 1 , o 3}, …, {o n−1 , o n}

….

Varianta n - { o 1 ,o 2 , … , o n }

Cazul 3. Lungimea soluției este diferită, iar pe nivele diferite în stivă sunt valori din aceeași mulțime.

Pentru generarea soluțiilor vom ține cont de următoarele raționamente:

{1,2,3}={1,3,2}={2,1,3}={2,3,1}={3,1,2}={3,2,1}

Vom lua la bază algoritmul pentru permutări.


Completăm stiva: n=3

{1} – soluție finală, tipar, urca in stiva

{1,1} – solutie partiala invalida, se afla pe nivelul 2 in stiva

{1,2} - soluție finală, tipar, urca in stiva

{1,2,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,2} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,2,3} - soluție finală, tipar, pe ultimul nivel in stiva au fost depuse toate valorile, coboara in stiva

{1,3} - soluție finală, tipar, urca in stiva

{1,3,1} - solutie partiala invalida, se afla pe nivelul 3 in stiva

{1,3,2} = {1,2,3}

Ca să evităm acest lucru vom completa stiva în ordine crescătoare: {1}, {2}, {3}, {1,2}, {1,3}, {2,3}, {1,2,3}
plus mulțimea vidă.

În total avem 2n submulțimi.

Pentru n=4 vom avea submulțimile: {1}, {2}, {3}, {4}, {1,2}, {1,3}, {1,4}, {2,3},{2,4}, }, {3,4}, {1,2,3},
{1,2,4}, {1,3,4}, {2,3,4}, {1,2,3,4} plus mulțimea vidă.

Programul Pascal:

Fincția Valid – fictivă;

Program backtracking_submultimile_unei_multimi; {recursiv}


uses crt;
type vector=array[0..25] of integer;
var st:vector;
n:integer;
Procedure initial;
var i:integer;
begin
write('Introdu n=');
readln(n);
writeln('Submultimile unei multimi din ',n,' elemente : ');
for i:=1 to n do st[i]:=0;
end;
Function valid(p:integer):boolean;
begin
valid:=true;
end;
Procedure tipar(p:integer);
var i:integer;
begin
for i:=1 to p do
write(st[i]:2,' ');
writeln;
end;
Procedure backtr(p:integer);
var pval:integer;
begin
for pval:=st[p-1]+1 to n do
begin
st[p]:=pval;
if valid(p) then
begin
tipar(p);
backtr(p+1);
end;
end;
end;
Begin
clrscr;
initial;
backtr(1);
readkey;
End.

Pentru acasă:

Problema 1. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w .

Problema 2. Mihai pleacă în călătorie. El are un geamantan în care va lua câteva lucruri necesare pentru
el în călătorie. Ajutați-l pe Mihai să-și facă bagajele cu condiția că Mihai niciodată nu ia cu sine obiectele
o m și o w , iar capacitatea bagajului este S.

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