语言c++,用迭代回溯方法实现n皇后问题,输出所有放置方法及总数,写出代码
时间: 2023-06-19 13:34:40 浏览: 81
以下是用迭代回溯方法实现n皇后问题的C++代码,其中使用了一个二维数组来表示棋盘,1代表皇后,0代表空格。backtrack函数用于递归回溯,isValid函数用于判断当前位置是否可以放置皇后。
```
#include <iostream>
#include <vector>
using namespace std;
int count = 0; //记录摆放方案总数
void backtrack(vector<vector<int>>& board, int row) {
if (row == board.size()) { //如果已经填满了所有行,则找到一种新的可行方案
count++;
cout << "第" << count << "种方案:" << endl;
for (int i = 0; i < board.size(); i++) {
for (int j = 0; j < board.size(); j++) {
cout << board[i][j] << " ";
}
cout << endl;
}
return;
}
for (int col = 0; col < board.size(); col++) { //枚举当前行所有列
if (isValid(board, row, col)) { //如果当前位置可以放置皇后
board[row][col] = 1; //放置皇后
backtrack(board, row + 1); //递归填下一行
board[row][col] = 0; //回溯,将当前位置重置为0
}
}
}
bool isValid(vector<vector<int>>& board, int row, int col) {
//检查当前列是否有其他皇后
for (int i = 0; i < row; i++) {
if (board[i][col] == 1) {
return false;
}
}
//检查左上方是否有皇后
for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {
if (board[i][j] == 1) {
return false;
}
}
//检查右上方是否有皇后
for (int i = row - 1, j = col + 1; i >= 0 && j < board.size(); i--, j++) {
if (board[i][j] == 1) {
return false;
}
}
return true;
}
int main() {
int n;
cout << "请输入棋盘大小(n皇后问题):" << endl;
cin >> n;
vector<vector<int>> board(n, vector<int>(n, 0)); //初始化棋盘
backtrack(board, 0);
cout << "共有" << count << "种方案。" << endl;
return 0;
}
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)