Не знаю, просто нарисовал свою Паскаль-программку. Не утверждаю, что оптимальная, и даже скорее наоборот, но зато работает при любой размерности матрицы.
Код:
Const
Nmax=12;
Var
N,i,j,j1,j2,k:Byte;
sj:ShortInt;
A:Array[1..Nmax,1..Nmax] of Byte;
Begin
Write('N (<',Nmax+1,') = ');
Readln(N);
Writeln;
k:=0;
sj:=1;
for i:=1 to N do
for j:=1 to N do
A[i,j]:=0;
i:=1;
Repeat
j1:=i;
j2:=N-i+1;
if sj=1 then
for j:=j1 to j2 do
begin
k:=k+1;
A[i,j]:=k;
end
else
for j:=j2 downto j1 do
begin
k:=k+1;
A[i,j]:=k;
end;
sj:=-sj;
i:=i+1;
Until i>N-i+1;
Repeat
j1:=N-i+1;
j2:=i;
if sj=1 then
for j:=j1 to j2 do
begin
k:=k+1;
A[i,j]:=k;
end
else
for j:=j2 downto j1 do
begin
k:=k+1;
A[i,j]:=k;
end;
sj:=-sj;
i:=i+1;
Until i=N+1;
for i:=1 to N do
begin
for j:=1 to N do Write(A[i,j]:5);
writeln;
end;
Readln
End.