8 皇后呢

👁️ 2 人浏览 💬 0 人评论 ❤️ 添加收藏

换成经典的 8×8 棋盘。运行同样的程序:

#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
using namespace std;

struct Stat {
    int c = 0;   // 找到几个解
    int v = 0;   // 走过几个结点
};

bool queen_ok(const vector<int>& col, int c) {
    int r = (int)col.size();
    for (int i = 0; i < r; i++) {
        if (col[i] == c || abs(col[i] - c) == r - i) return false;
    }
    return true;
}

void queens_dfs(int n, vector<int>& col, Stat& st) {
    st.v++;
    if ((int)col.size() == n) {
        st.c++;
        return;
    }
    for (int c = 0; c < n; c++) {
        if (!queen_ok(col, c)) continue;
        col.push_back(c);
        queens_dfs(n, col, st);
        col.pop_back();
    }
}

Stat queens(int n) {
    Stat st;
    vector<int> col;
    queens_dfs(n, col, st);
    return st;
}

int main() {
    cout << queens(8).c << endl;
}

(本题用 g++ -std=c++17 -O0 编译。)

提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论