Pagini recente » Cod sursa (job #1825880) | Cod sursa (job #2265181) | Cod sursa (job #2174963) | Cod sursa (job #1251228) | Cod sursa (job #226188)
Cod sursa(job #226188)
Type stiva=array[1..1000] of integer;
Var
st:stiva;
as,ev:boolean;
k,N:integer;
f,g:text;
{ 1. Ce punem in stiva? }
Procedure init(k:integer; var st:stiva);
begin
st[k]:=0;
end;
Procedure succesor (k:integer; var st:stiva; var as:boolean);
begin
if st[k]<N then begin
st[k]:=st[k]+1;
as:=True;
end
else as:=False;
end;
Procedure valid(k:integer; st:stiva; var ev:boolean);
var i:integer;
begin
ev:=True;
{ distincte }
For i:=1 To k-1 Do
if (st[k]=st[i]) Or (abs(st[k]-st[i])=k-i) then begin
ev:=False;
break;
end;
end;
Function Solutie(k:integer):boolean;
begin
Solutie:=(k=N);
end;
Procedure Tipar(k:integer);
var i,j:integer;
begin
writeln(g,n);
For i:=1 to k do
For j:=k downTo 1 do
if st[i]=j then Writeln(g,i,' ',j);
end;
Begin
assign(f,'dame.in');
reset(f);
Readln(f,N);
close(f);
assign(g,'dame.out');
rewrite(g);
{ partea fixa }
k:=1; { nivelul stivei }
init(k,st);
while k>0 do begin { cat timp stiva nu este vida }
repeat
{ 1. Ce punem in stiva? }
succesor(k,st,as);
if as then { Este valida valoarea pusa? }
valid(k,st,ev);
until (as and ev) Or (Not as);
if as then
if Solutie(k) then begin Tipar(k);k:=0; end
else begin
{ urcam in stiva }
k:=k+1;
init(k,st);
end
else { coboram in stiva }
k:=k-1;
end;
close(g);
End.