/* ID: lorelei TASK: spiral LANG: C++ */ #include <iostream> using namespace std; const int MAXN = 800; const int dx[]= {0,1,0,-1}; const int dy[]= {1,0,-1,0}; int m[MAXN][MAXN]; int N,M; int main(){ int i, j, x=1, y=1, dir=0; cin>>N; M = N*N; for(i=1; i<=M; ++i){ m[x][y]=i; int tx = x + dx[dir]; int ty = y + dy[dir]; if(m[tx][ty] || tx>N || ty>N || tx<1 || ty<1)dir=(dir+1)%4; x += dx[dir]; y += dy[dir]; } for(i=1; i<=N; ++i){ for(j=1; j<N; ++j) cout<<m[i][j]<<" "; cout<<m[i][N]<<endl; } return 0; }
const dx:array[0..3] of longint=(0,1,0,-1); dy:array[0..3] of longint=(1,0,-1,0); var a:array[0..20,0..20] of longint; n,dir,i,j,x,y,tx,ty:longint; begin readln(n); x:=1; y:=1; dir:=0; for i:=1 to n*n do begin a[x,y]:=i; tx:=x+dx[dir]; ty:=y+dy[dir]; if (tx>n)or(tx<1)or(ty>n)or(ty<1)or(a[tx,ty]>0) then dir:=(dir+1)mod 4; x:=x+dx[dir]; y:=y+dy[dir]; end; for i:=1 to n do begin for j:=1 to n-1 do write(a[i,j],' '); writeln(a[i,n]); end; end.