Pagini recente » Statistici Stermin Tamara (tamy) | Cod sursa (job #1549096) | Diferente pentru preoni-2007/runda-finala/poze/pregatiri intre reviziile 3 si 2 | Profil M@2Te4i | Cod sursa (job #231645)
Cod sursa(job #231645)
type stiva=array[1..60000] of longint;
var st:stiva;
as,ev:boolean;
k,l,i,n,m,j:longint;
f,g:text;
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*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 p,r,i:integer;
begin
ev:=true;
p:=k mod n;
if p=0 then p:=n;
if p=l then if st[k] mod 2<>0 then ev:=false;
for i:=1 to k-1 do
if st[k]=st[i] then begin ev:=false; break;end;
if p>1 then if st[k-1]>st[k] then ev:=false;
end;
function solutie(k:integer):boolean;
begin
solutie:=k=(n*n);
end;
procedure tipar(k:integer);
var i,j:integer;
begin
for i:=1 to (n*n) do
begin
write(g,st[i],' ');
if i mod n =0 then writeln(g);
end;
end;
begin
assign(f,'tablete.in');
reset(f);
assign(g,'tablete.out');
rewrite(g);
read(f,n);
read(f,l);
k:=1;
init(k,st);
while k>0 do begin
repeat
succesor(k,st,as);
if as then valid(k,st,ev);
until (as and ev ) or (not as);
if as then
if solutie(k) then begin tipar(k); break; end
else begin
k:=k+1;
init(k,st);
end
else k:=k-1;
end;
close(f);
close(g);
end.