八皇后问题打印出每种结果c++语言
时间: 2023-08-15 22:07:32 浏览: 40
八皇后问题是经典的回溯算法问题,可以使用深度优先搜索和递归来实现。以下是使用C++语言实现八皇后问题并打印出每种结果的示例代码:
```c++
#include <iostream>
#include <vector>
using namespace std;
// 判断当前位置是否合法
bool isValid(vector<int>& queens, int row, int col) {
for (int i = 0; i < row; ++i) {
// 判断同一列是否有皇后
if (queens[i] == col) return false;
// 判断对角线是否有皇后
if (row - i == abs(col - queens[i])) return false;
}
return true;
}
// 递归求解八皇后问题
void solveNQueens(vector<vector<string>>& res, vector<int>& queens, int row, int n) {
if (row == n) {
// 将结果转换为字符串形式
vector<string> solution;
for (int i = 0; i < n; ++i) {
string rowStr(n, '.');
rowStr[queens[i]] = 'Q';
solution.push_back(rowStr);
}
res.push_back(solution);
} else {
for (int i = 0; i < n; ++i) {
if (isValid(queens, row, i)) {
queens[row] = i;
solveNQueens(res, queens, row + 1, n);
}
}
}
}
// 打印出每种结果
void printSolutions(vector<vector<string>>& res) {
for (int i = 0; i < res.size(); ++i) {
cout << "Solution " << i + 1 << ":" << endl;
for (int j = 0; j < res[i].size(); ++j) {
cout << res[i][j] << endl;
}
cout << endl;
}
}
int main() {
int n = 8;
vector<vector<string>> res;
vector<int> queens(n);
solveNQueens(res, queens, 0, n);
printSolutions(res);
return 0;
}
```
该代码使用递归和回溯算法实现了八皇后问题,并将每种结果打印出来。