n个皇后问题c++结果完整代码
时间: 2024-10-25 17:12:51 浏览: 20
n个皇后问题是经典的回溯算法问题,涉及到在一个n×n的棋盘上放置n个皇后,保证任意两个皇后之间不存在同行、同列或对角线上的冲突。下面是一个基本的C++代码示例,它使用了深度优先搜索(DFS)来解决这个问题:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 判断当前位置i和行号j是否有冲突
bool isSafe(vector<int>& cols, int i, int j, int n) {
// 检查列冲突
for (int k = 0; k < i; ++k)
if (cols[k] == j)
return false;
// 检查左上方对角线冲突
int leftDiagonal = j - i;
if (leftDiagonal >= 0 && cols[leftDiagonal] == j)
return false;
// 检查右上方对角线冲突
int rightDiagonal = n + j - i;
if (rightDiagonal >= 0 && cols[rightDiagonal] == j)
return false;
return true;
}
// 回溯函数
void solveNQueens(int n, vector<int>& cols, int row) {
if (row == n) { // 如果摆放完所有皇后,找到一种解
for (int i : cols) {
cout << " ";
cout << i + 1; // 表达位置,从1开始计数
}
cout << endl;
return;
}
for (int col = 0; col < n; ++col) {
// 如果当前列可以放置皇后,递归尝试下一个位置
if (isSafe(cols, row, col, n)) {
cols[row] = col; // 将皇后放在指定列
solveNQueens(n, cols, row + 1); // 继续处理下一行
}
}
}
int main() {
int n;
cout << "请输入皇后数量(1 <= n <= 9): ";
cin >> n;
vector<int> cols(n);
solveNQueens(n, cols, 0);
return 0;
}
```
阅读全文