#include <bits/stdc++.h>
using namespace std;
struct node
{
int x, y;
}a[50];
int n, ans[50][50];
inline void insert(int k)
{
if(a[k - 1].x == 1 && a[k - 1].y != n) //满足条件 1
{
a[k] = (node){n, a[k - 1].y + 1};
ans[n][a[k - 1].y + 1] = k;
}
else //满足条件 2
{
a[k] = (node){a[k - 1].x + 1, 1};
ans[a[k - 1].x + 1][1] = k;
}
if(a[k - 1].x == 1 && a[k - 1].y == n) //满足条件 3
{
a[k] = (node){a[k - 1].x + 1, a[k - 1].y};
ans[a[k - 1].x + 1][a[k - 1].y] = k;
}
else //满足条件 4
{
if(ans[a[k - 1].x - 1][a[k - 1].y + 1])
{
a[k] = (node){a[k - 1].x + 1, a[k - 1].y};
ans[a[k - 1].x + 1][a[k - 1].y] = k;
}
else
{
a[k] = (node){a[k - 1].x - 1, a[k - 1].y + 1};
ans[a[k - 1].x - 1][a[k - 1].y + 1] = k;
}
}
}
int main()
{
cin >> n;
a[1] = (node){1, n / 2 + 1}; //将1填写在第一行最中间
ans[1][n / 2 + 1] = 1;
for(int k = 2; k <= n * n; k++) //枚举从2到n*n
insert(k); //插入k
for(int i = 1; i <= n; i++, puts(""))
for(int j = 1; j <= n; j++)
cout << ans[i][j] << " ";
return 0;
}
wtm真是服了!