#include<stdio.h>
#include<iostream>
using namespace std;
int record[92][9], mark[9] ;
bool range[9], line1[17], line2[17];
namespace A {
int count = 0;
}
void tryToPut(int);
int main()
{
int i, testtimes, num;
scanf_s("%d", &testtimes);
for (i = 0; i <= 8; i++)
range[i] = true;
for (i = 0; i < 17; i++)
line1[i] = line2[2] = true;
tryToPut(1);
while (testtimes--) {
scanf_s("%d", &num);
for (i = 1; i <= 8; i++)
{
printf("%d", record[num - 1][i]);
}
printf("\n");
}
}
void tryToPut(int i)
{
if (i > 8) {//如果最后一个皇后被放置完毕,将当前解复制到全部解中;
for (int k = 1; k < 9; k++)
{
record[A::count][k] = mark[k];
}
A::count++;
}
for (int j = 1; j <= 8; j++) {
if (range[j] && line1[i + j] && line2[i - j + 9]) {//如果与前面的不冲突则将皇后放置此处
mark[i] = j;
range[j] = line1[i + j] = line2[i - j + 9] = false;
tryToPut(i + 1);
range[j] = line1[i + j] = line2[i - j + 9] = true;
}
}
}
查不出错有点奇怪’
网友评论