#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判断法差不多,就是把
//中间右上,左下的部分跑出来