回溯法实现n皇后问题的c++output
时间: 2023-08-24 18:08:00 浏览: 58
以下是回溯法实现n皇后问题的C++代码示例:
```c++
#include <iostream>
#include <vector>
using namespace std;
void solveNQueens(int n, vector<vector<string>>& res, vector<string>& board, vector<bool>& col, vector<bool>& dia1, vector<bool>& dia2, int row) {
if (row == n) {
res.push_back(board);
return;
}
for (int i = 0; i < n; i++) {
if (!col[i] && !dia1[row + i] && !dia2[row - i + n - 1]) {
board[row][i] = 'Q';
col[i] = true;
dia1[row + i] = true;
dia2[row - i + n - 1] = true;
solveNQueens(n, res, board, col, dia1, dia2, row + 1);
board[row][i] = '.';
col[i] = false;
dia1[row + i] = false;
dia2[row - i + n - 1] = false;
}
}
}
vector<vector<string>> solveNQueens(int n) {
vector<vector<string>> res;
vector<string> board(n, string(n, '.'));
vector<bool> col(n, false);
vector<bool> dia1(2 * n - 1, false);
vector<bool> dia2(2 * n - 1, false);
solveNQueens(n, res, board, col, dia1, dia2, 0);
return res;
}
int main() {
int n = 4;
vector<vector<string>> res = solveNQueens(n);
for (auto& board : res) {
for (auto& row : board) {
cout << row << endl;
}
cout << endl;
}
return 0;
}
```
输出结果:
```
.Q..
...Q
Q...
..Q.
..Q.
Q...
...Q
.Q..
```