#include #include using namespace std;

bool check(vector& 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 backtrack(vector<vector>& res, vector& queens, int row, int n) { if(row == n) { res.push_back(queens); return; }

for(int col=0; col<n; col++) {
    if(check(queens, row, col)) {
        queens[row] = col;
        backtrack(res, queens, row+1, n);
    }
}

}

vector<vector> solveNQueens(int n) { vector<vector> res; vector queens(n, 0); backtrack(res, queens, 0, n); return res; }

int main() { vector<vector> res = solveNQueens(8); for(int i=0; i<res.size(); i++) { cout << "No." << i+1 << endl; for(int j=0; j<res[i].size(); j++) { for(int k=0; k<res[i].size(); k++) { if(res[i][j] == k) { cout << 1 << " "; } else { cout << 0 << " "; } } cout << endl; } } return 0;

C++题目描述在国际象棋棋盘上放置八个皇后要求每两个皇后之间不能直接吃掉对方。注:国际象棋中的皇后可以直接吃掉与其同行、同列或者在同一条对角线上的棋子。注2:国际象棋棋盘是一个88的正方形每个11的小方格中只能有一个棋子。下图就是实例其中有五个角皇冠的这位就是皇后输入无你不需要读入任何信息只需要用你的眼睛了解题面便可输出按给定顺序和格式输出所有八皇后问题的解见样例。样例输出No11 0 0 0 0

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

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