Cod sursa(job #1600430)

Utilizator DoubleNyNinicu Cristian DoubleNy Data 14 februarie 2016 23:42:43
Problema Combinari Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.54 kb
var v:array[1..30] of integer;
    n,p:integer;

 function valid(k:integer):boolean;
 var i,j:integer;
   begin
       valid:=true;
       for i:=1 to k-1 do
       if v[i]=v[k] then
         begin
             valid:=false;
             exit
         end;

       i:=1;
       j:=i+1;
       while (j<=p) do
        begin
            if v[j]=v[i] then valid:=false;
            inc(i);
            inc(j);
            if v[j]=0 then break;
        end;

      // for i:=1 to k-1 do
       // for j:=1 to k do if v[i]<>v[j] then valid:=true;
   end;

 function solutie(k:integer):boolean;
   begin
       if k=p then solutie:=true
       else solutie:=false;
   end;

 procedure afisare(k:integer);
 var i:integer;
   begin
        for i:=1 to k do write(output,v[i],' ');
        writeln(output);
   end;
 function lexicografic(k:integer):boolean;
  var i:integer;
  begin
   lexicografic:=true;
   for i:=2 to p do
   if v[i]<v[i-1] then lexicografic:=false;
  end;

 procedure backtrack(k:integer);
 var i:integer;
   begin
       for i:=1 to n do
         begin
             v[k]:=i;

             if valid(k) then
               begin
                  if (solutie(k)) {and lexicografic(k)} then afisare(k);
                  backtrack(k+1);
               end;

         end;
   end;

 Begin
   assign(input,'combinari.in');  reset(input);
   assign(output,'combinari.out'); rewrite(output);
   fillchar(v,sizeof(v),0);
   readln(input,n,p);
   backtrack(1);
   close(input);
   close(output);
 end.