问题分析
首先可以打表找规律,其次可以自己构出矩阵。
看了好多大佬的方法都是自己找规律手动构图Orz
其中一种就是根据已给出的
n=2
n
=
2
的矩阵往出构造
n=4
n
=
4
的矩阵(打表的话可以发现
n
n
为奇数时是无解的,证明略(主要不会hhh))。当边长增加2时,我们将前一个矩阵放在中间,然后依次往边上赋值,但是要保证上下和左右抵消掉(比如用和
−1
−
1
),然后去考虑对角就ok了。
1 -1 -1 -1
1 -1 --> 1 0 -1 -1
1 0 1 1 1 -1
1 1 1 0
#include<bits/stdc++.h>
int main()
{
int T;
scanf("%d", &T);
while (T--) {
int n;
scanf("%d", &n);
if (n & 1) {
printf("impossible\n");
continue;
}
printf("possible\n");
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
if (i == j) printf("%d", i & 1);
else
printf("%d%c", i < j ? -1 : 1, j == n ? '\n' : ' ');
}
}
}