1 条题解

  • 0
    @ 2024-12-4 9:39:23
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 110, INF = 0x3f3f3f3f, MOD = 1E9 + 7;
    int n, m, a[N], cnt;
    bool b[N], c[N], d[N];
    // a[x]=y 在(x,y)放置皇后
    // b[y] 表示第 y 列是否放置
    // c[x+y], d[x-y+n] 表示对角线1,2是否放置
    string ans[N];
    void dfs(int x) {
        if (x > n) {
            ++cnt;
            for (int i = 1; i <= n; i++)
                ans[cnt] += a[i] + '0';
            return;
        }
        for (int y = 1; y <= n; y++) {
            if (!b[y] && !c[x + y] && !d[x - y + n]) {
                a[x] = y, b[y] = c[x + y] = d[x - y + n] = 1, dfs(x + 1);
                b[y] = c[x + y] = d[x - y + n] = 0;
            }
        }
    }
    int main(int argc, char* argv[]) {
        int T, x;
        n = 8, dfs(1);
        cin >> T;
        while (T--) {
            cin >> x;
            cout << ans[x] << endl;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    525
    时间
    1000ms
    内存
    16MiB
    难度
    1
    标签
    递交数
    105
    已通过
    85
    上传者