Вспомнил, как в десятом классе решал эту же задачу. Только на Паскале и сам. Чудом сохранился код, который вам и покажу, хотя после предыдущих ответов он не несёт никакой ценности.
type tabelo = array[byte,byte] of integer;
procedure filling_spiral(var Q:tabelo; a,b:integer);
var c,d,e,f,g,h:integer;
begin
c:=a-1;
d:=b-1;
e:=1;
if a>=b then f:=b else f:=a;
for g:=0 to (f div 2) do
begin
for h:=b-d+g to d-g do
begin
if Q[a-c+g,h]=0 then Q[a-c+g,h]:=e else break;
inc(e)
end;
for h:=a-c+g to c-g do
begin
if Q[h,b-g]=0 then Q[h,b-g]:=e else break;
inc(e)
end;
for h:=b-g downto b-d+g+1 do
begin
if Q[a-g,h]=0 then Q[a-g,h]:=e else break;
inc(e)
end;
for h:=a-g downto a-c+g do
begin
if Q[h,b-d+g]=0 then Q[h,b-d+g]:=e else break;
inc(e)
end
end
end;