#include <stdio.h>

int main()

{

int n;

int Arr[10][10];

scanf("%d",&n);

int i=0,j=0;

int temp=2;

int up=0,down=n-1,left=0,right=n-1;

Arr[0][0]=1;

while(temp<=n*n)

{

if((i==up||i==down)&&j%2==0)//上,下边界偶数位向右

{

Arr[i][++j]=temp;temp++;

}

if(i==up&&j%2==1)//上边界奇数位向左下,直到左边界

{

while(j>left)

{

Arr[++i][--j]=temp;temp++;

}

}

if(i>up&&i<down&&i%2==1&&(j==left||j==right))//左,右边界奇数位向下

{

Arr[++i][j]=temp;temp++;

}

if(i>up&&i<down&&i%2==0&&j==left)//左边界偶数位右上

{

while(i>up)

{

Arr[--i][++j]=temp;temp++;

}

}

if(i==down&&j%2==1)//下边界奇数位右上走

{

while(j<right)

{

Arr[--i][++j]=temp;temp++;

}

}

if(i>up&&i<down&&i%2==0&&j==right)//右边界偶数位左下走

{

while(i<down)

{

Arr[++i][--j]=temp;temp++;

}

}

}

for(i=0;i<n;i++)

{

for(j=0;j<n;j++)

printf("%5d",Arr[i][j]);

printf("\n");

}

return 0;

}

//运行会超时,但是思路很清晰,每个判断条件优化一下,就可以跑,优化之后和第一个题解的pos判断法差不多,就是把

//中间右上,左下的部分跑出来