Pagini recente » Cod sursa (job #36536) | Cod sursa (job #619289) | Cod sursa (job #1410937) | Cod sursa (job #398960) | Cod sursa (job #912083)
Cod sursa(job #912083)
//probleme celor n dame by Darius
program damele;
type stiva=array[1..20]of byte;
var st:stiva;n,k:byte;
as,ev:boolean;//as=am succesor; ev=e valid
f,g:text;
procedure initializare(var st:stiva; k:byte);
begin
st[k]:=0; //nivelul k se initializeaza cu 0
end;
procedure succesor(var as:boolean; var st:stiva; k:byte);
begin
if st[k]<n then begin
as:=true; //am succesor
inc(st[k]);
end
else as:=false; //nu am succesor
end;
procedure validare(var ev:boolean;st:stiva;k:byte);
var i:byte;
begin
ev:=true;
for i:=1 to k-1 do
if (st[i]=st[k]) then ev:=false;
//daca am pus cum nu trebuie damele nu e valida
end;
function solutie(k:byte):boolean;
begin
solutie:=(k=n); //este solutie buna daca am plasat toate cele n dame
end;
procedure tipareste;
var i:byte;
begin
for i:=1 to n do write(g,st[i],' ');
writeln(g);
end;
procedure back(n:byte);
begin
k:=1;initializare(st,k);
while k>0 do //cat timp stiva nu e vida
begin
repeat
succesor(as,st,k);
if as then validare(ev,st,k);
until (not as) or (as and ev);
//pana cand nu am solutie sau pana cand am solutie valida
if as then if solutie(k) then tipareste //gata o solutie
else begin
inc(k); //mai am de pus
initializare(st,k);
end
else dec(k); //da inapoi
end;
end;
begin
assign(f,'permutari.in');reset(f);
assign(g,'permutari.out');rewrite(g);
readln(f,n);
back(n); //rezolva problema
close(f);close(g);
end.