#include <iostream>
using namespace std;
//皇后数量
int num = 0;
//皇后的在棋盘中的位置
//数组下标代表皇后所位于棋盘的行
//所在下标对应数组中的值代表皇后所位于棋盘的列
int x[100];
//排列解的个数
int sum = 0;
//判断皇后所在位置是否合法
//与前面已排好位置的皇后进行条件检验
bool place(int t) {
//x[t] == x[i] 判断 第t行的皇后是否与第i行的皇后处在同一列
//(x[i] - i) == (x[t] - t) 判断 第t行第x[t]列的皇后是否与第i行第x[i]列处在同一对角线上
//(x[i] + i) == (x[t] + t) 判断 第t行第x[t]列的皇后是否与第i行第x[i]列处在同一斜对角线上
for (int i = 0; i < t; i++) {
if (x[t] == x[i] || (x[i] + i) == (x[t] + t) || (x[i] - i) == (x[t] - t))
return false;
}
return true;
}
//回溯法求皇后的排列情况
void queue(int t) {
//如果皇后已全部排好位置,输出皇后的排列情况
if (t == num) {
sum++;
cout << "第" << sum << "种排列:";
for (int i = 0; i < num; i++)
cout << x[i] << " ";
cout << endl;
} else {
//逐个测试第t行第i列是否可以满足皇后的位置的要求,如果满足,进入下一行继续递归
for (int i = 0; i < num; i++) {
x[t] = i;
if (place(t))
queue(t + 1);
}
}
}
int main() {
num = 8;
sum = 0;
for (int i = 0; i < num; i++)
x[i] = 0;
queue(0);
return 0;
}
八皇后问题
最新推荐文章于 2023-07-07 14:04:01 发布