求助
#include<bits/stdc++.h>
using namespace std;
int n,ans[40][40];
struct FLAG
{
int i;
int j;
};
FLAG flag[1600];
int main()
{
cin>>n;
for(int k=1;k<=n*n;k++)
{
if(k==1)
{
ans[1][(n+1)/2]=k;
flag[k].i=1;
flag[k].j=(n+1)/2;
}
else if(flag[k-1].i==1&&flag[k-1].j!=n)
{
ans[n][flag[k-1].j+1]=k;
flag[k].i=n;
flag[k].j=flag[k-1].j+1;
}
else if(flag[k-1].i!=1&&flag[k-1].j==n)
{
ans[flag[k-1].j-1][1]=k;
flag[k].i=flag[k-1].i-1;
flag[k].j=1;
}
else if(flag[k-1].i==1&&flag[k-1].j==n)
{
ans[flag[k-1].i+1][flag[k-1].j]=k;
flag[k].i=flag[k-1].i+1;
flag[k].j=flag[k-1].j;
}
else
{
if(ans[flag[k-1].i-1][flag[k-1].j+1]==0)
{
ans[flag[k-1].i-1][flag[k-1].j+1]=k;
flag[k].i=flag[k-1].i-1;
flag[k].j=flag[k-1].j+1;
}
else
{
ans[flag[k-1].i+1][flag[k-1].j]=k;
flag[k].i=flag[k-1].i+1;
flag[k].j=flag[k-1].j;
}
}
}
for(int ii=1;ii<=n;ii++)
{
for(int jj=1;jj<=n;jj++)
{
cout<<ans[ii][jj]<<' ';
}
cout<<endl;
}
}