Cod sursa(job #912083)

Utilizator Dddarius95Darius-Florentin Neatu Dddarius95 Data 12 martie 2013 06:23:03
Problema Generare de permutari Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.76 kb
//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.