文件目录

#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int ans[8][8];
string s[100];
int n = 1;
bool pd(int x, int y)
{
    // 横略,竖
    for (int i = 0; i < 8; i++)
        if (ans[i][y])
            return false;
    // 左斜右斜 abs(i-x)==abs(j-y)二维数组 i,j 与 x,y 是否斜线
    for (int i = 0; i < 8; i++)
        for (int j = 0; j < 8; j++)
            if (abs(i - x) == abs(j - y) && ans[i][j])
                return false;
    return true;
}
void dfs(int x)
{
    if (x == 8)
    {
        s[n] = "";
        for (int i = 0; i < 8; i++)
            for (int j = 0; j < 8; j++)
                if (ans[i][j])
                    s[n] += to_string(j + 1);
        n++;
        return;
    }
    for (int i = 0; i < 8; i++) // 第x行棋子放置的位置下标
    {
        if (pd(x, i))
        {
            ans[x][i] = 1;
            dfs(x + 1);
            ans[x][i] = 0;
        }
    }
}
int main()
{
    dfs(0);
    int k, m;
    cin >> k;
    while (k--)
    {
        cin >> m;
        cout << s[m] << '\n';
    }
    return 0;
}