主要是模拟, 需要注意的 是类似插入排序 先试探 下一个位置 是否可以放入数 如果不可以就转向 下、左、上、右
#include<stdio.h>
#define MAX 105
#include<string.h>
int a[MAX][MAX];
int main()
{
int n;
scanf("%d",&n);
int t = 0;
memset(a,0,sizeof(a));
int i = 0, j = n; //注意 初始值
while(t < n*n){
while(i < n && a[i+1][j] == 0){
++i;
a[i][j] = ++t;
}
while(j > 1 && a[i][j-1] == 0){
--j;
a[i][j] = ++t;
}
while(i > 1 && a[i-1][j] == 0){
--i;
a[i][j] = ++t;
}
while(j < n && a[i][j+1] == 0){
++j;
a[i][j] = ++t;
}
}
for(int i = 1; i <= n; ++i){
for(int j = 1; j <= n; ++j){
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}