1 条题解

  • 0
    @ 2025-4-9 10:46:19
    • 八皇后模板题目
    • 考虑在每一行放置一个皇后 dfs(x)
    • 如果当前点 (x,y) 可以放,就放;
    • 由于需要求出所有方案数,需要回溯。
    • 如果不会正解,可以考虑
    int ans[] = {1,1,0,0,2,10,4,40,92,352,724,
    2680};
    cin>>n;
    cout<<ans[n];
    
    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N = 10010, 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是否放置
    void dfs(int x) {
        if (x > n) {
            ++cnt;
            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;
            }
        }
    }
    void solve() {
        // cin>>n;
        // cnt=0, dfs(1);
        // cout<<cnt<<endl;
        int ans[] = {1, 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680};
        cin >> n;
        cout << ans[n];
    }
    int main(int argc, char* argv[]) {
        int t = 1;
        // cin >> t;
        while (t--) {
            solve();
        }
        return 0;
    }
    
    
    • @ 2025-4-9 21:06:44

      哥,你这个只是八皇后问题吧,这个不是8黑8白皇后吧?

  • 1

信息

ID
2085
时间
1000ms
内存
256MiB
难度
9
标签
(无)
递交数
12
已通过
4
上传者