Problema permutarilor Pascal
-
Upload
dan-zagnat -
Category
Documents
-
view
214 -
download
0
description
Transcript of Problema permutarilor Pascal
Pentru a rezolva problema permutarilor prin metoda backtracking-ului vom avea nevoie de o functie de tip boolean care va verifica daca cifra de pe pozitia data prezinta este o solutie-candidat buna sau nu (nu este obligatorie dar reduce complexitatea vizuala a programului, devenind mai usor de lucrat), o procedura pentru afisare care la fel nu este mandatorie si o functie care va efectua backtracking-ul propriu zis.
type Tab= array[1..25] of integer;
var Sir:Tab;
i,n,p:integer;
function verificare(p:integer):boolean;
begin
verificare:=true;
for i:=1 to p-1 do
if sir[i]=st[p] then verificare:=false;
end;
procedure Afisare;
var i:integer;
begin
for i:=1 to n do writeln(sir[i],' ');
end;
procedure Backtracking;
begin
p:=1; {Incepem cu prima pozitie }
Sir[p]:=0; {Incepem sirul cu 0}
while p>0 do {Cat timp sirul nu este vid, adica exista, si deci nu au fost epuizate cazurile posibile}
begin
if Sir[p]<n then {Mai exista valori care nu au fost incercate pe aceasta pozitie}
begin
Sir[p]:=Sir[p]+1; {Ii atribuim acestei pozitii o alta valoare posibila }
if Verificare(p)=true then
if p=n then Afisare {solutia este finala si afisata}
else begin
p:=p+1;{Daca sirul nu este complet trecem la pozitia urmatoare}
Sir[p]:=0; {initializam pozitia cu 0}
end;
end;
else
p:=p-1; {Daca solutia nu este buna, conform principiul backtracking-ului mergem inapoi pana ce gasim problema}
end;
end;
begin
write('n=');
readln(n);
for i:=1 to n do
Sir[i]:=0;
Backtracking;
readln;
end.