当然可以帮你写一个解决八皇后问题的C++程序。以下是一个简单的实现:

#include <iostream>
#include <vector>

using namespace std;

const int N = 8;  // 棋盘大小

vector<vector<int>> res;  // 存储结果

// 判断当前位置能否放置皇后
bool isValid(vector<int>& queens, int row, int col) {
    for (int i = 0; i < row; ++i) {
        // 检查是否同列或对角线上有皇后
        if (queens[i] == col || queens[i] - col == i - row || queens[i] - col == row - i) {
            return false;
        }
    }
    return true;
}

// 回溯搜索解决八皇后问题
void backtracking(vector<int>& queens, int row) {
    if (row == N) {
        res.push_back(queens);
        return;
    }

    for (int col = 0; col < N; ++col) {
        if (isValid(queens, row, col)) {
            queens[row] = col;
            backtracking(queens, row + 1);
            queens[row] = -1;  // 回溯
        }
    }
}

// 打印结果
void printSolution() {
    for (int i = 0; i < res.size(); ++i) {
        cout << "Solution " << i + 1 << ":" << endl;
        for (int j = 0; j < N; ++j) {
            for (int k = 0; k < N; ++k) {
                if (res[i][j] == k) {
                    cout << "Q ";
                } else {
                    cout << ". ";
                }
            }
            cout << endl;
        }
        cout << endl;
    }
}

int main() {
    vector<int> queens(N, -1);  // queens[i]表示第i行皇后所在的列
    backtracking(queens, 0);
    printSolution();
    return 0;
}

这个程序使用了回溯算法来搜索解决八皇后问题的所有可能解。它首先定义了一个isValid函数来判断当前位置是否可以放置皇后,然后使用backtracking函数进行回溯搜索。最后,通过printSolution函数来打印所有的解决方案。

希望这个程序能够帮助到你

帮我写一个c++程序用于解决八皇后问题

原文地址: https://www.cveoy.top/t/topic/iMEx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录