模拟
简单模拟,按照题目给你的方法填就行了。
划水代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 39
#define MAXM 1521
using namespace std;
int n;
int a[MAXN+5][MAXN+5],f[MAXM+5][2];
int main(){
scanf("%d",&n);
a[1][n/2+1]=1; f[1][0]=1; f[1][1]=n/2+1;
for (int i=2;i<=n*n;i++){
int x=f[i-1][0],y=f[i-1][1];
if (x==1&&y!=n){
a[n][y+1]=i; f[i][0]=n; f[i][1]=y+1;
}
if (x!=1&&y==n){
a[x-1][1]=i; f[i][0]=x-1; f[i][1]=1;
}
if (x==1&&y==n){
a[x+1][y]=i; f[i][0]=x+1; f[i][1]=y;
}
if (x!=1&&y!=n)
if (!a[x-1][y+1]){
a[x-1][y+1]=i; f[i][0]=x-1; f[i][1]=y+1;
}
else{
a[x+1][y]=i; f[i][0]=x+1; f[i][1]=y;
}
}
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}