#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[30][30]={0};
int n;
scanf("%d",&n);
int i,j,k=1 ;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
a[i][j]=-1;
}
i=0,j=0;
int flag=1;
while(k<=n*n){
if(a[i][j]==-1)
a[i][j]=k;
k++;
if(flag==1)
{
j++;
if(j==n||a[i][j]!=-1)
{
j--;
i++;
flag=2;
}
}else if(flag==2)
{
i++;
if(i==n||a[i][j]!=-1)
{
i--;
j--;
flag=3;
}
}else if(flag==3)
{
j--;
if(j==-1||a[i][j]!=-1)
{
j++;
i--;
flag=4;
}
}else if(flag==4)
{
i--;
if(i==-1||a[i][j]!=-1)
{
i++;
j++;
flag=1;
}
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
printf("%4d",a[i][j]);
if((j+1)%n==0)
printf("\n");
}
}
通过标记的办法来记录边界,一共四个转折点,所以有四个标记