Acasa Tehnologie Backtracking: permutari

Backtracking: permutari

by Dragos Schiopu

>

{generare permutari}
program permutari;
type stiva=array [1..100] of integer;
var st:stiva;
n,k:integer;
as,ev:boolean;

procedure init(k:integer;var st:stiva);
begin
st[k]:=0;
end;

procedure succesor (var as:boolean;var st:stiva;k:integer);
begin
if st[k]<n then
begin
st[k]:=st[k]+1;
as:=true;
end
else as:=false;
end;

procedure valid(var ev:boolean;st:stiva;k:integer);
var i:integer;
begin
ev:=true;
for i:=1 to k-1 do
if st[k]=st[i] then ev:=false;
end;

function solutie (k:integer):boolean;
begin
solutie:=(k=n);
end;

procedure tipar;
var i:integer;
begin
for i:=1 to n do write(st[i]);writeln;
end;

BEGIN
write('N=');
readln(n);
k:=1;
init(k,st);
while (k>0) do
begin
repeat
succesor(as,st,k);
if as then valid(ev,st,k);
until (not as) or (as and ev);
if as then if solutie(k) then tipar
else
begin
k:=k+1;
init(k,st)
end
else dec(k);
end;
readln;
end.
{PascalZone.uv.ro}

s-ar putea sa-ti placa