逻辑注释在代码中
完整代码:
#include<iostream>
#include<queue>
using namespace std;
// 用来判断棋盘上的点(row, column) 是否安全
bool canPut (int row, int column, int *answer);
int main()
{
int queens;
// current表示当前层数,activated表示当前活结点所在的column
int activated = 0;
int current = 0;
cout << "输入皇后数:";
cin >> queens;
if (queens <= 3)
{
cout << "no solution!";
return 0;
}
// 每一层都有一个队列保存可生成结点
queue<int> Queue[queens];
// 棋盘 ,改用answer保存
// int chessboard[queens][queens] = {0};
// answer作为辅助数组,下标表示层级,值表示column ,也就是棋盘
int answer[queens] = {-1};
// 第一层肯定全为活结点
for (int i = 0; i < queens; i++)
{
Queue[0].push(i);
}
while (1)
{
// 当前层级没有安全位置或者回退
if (Queue[current].empty())
{
current--;
continue;
}
// 找不到解(边界问题)
if (current == -1)
{
cout<< "no solution!";
break;
}
// 取当前层级队列头为活结点并弹出队列
activat