#include <iostream>
#include<stdlib.h>
using namespace std;
//解题思路:x[i]=j表示第i行的皇后放在第j列上
int Place(int k, int x[]) { //检查所放位置是否会冲突,若冲突返回1否则返回0
for(int i = 0; i < k; i++) {
if(x[k] == x[i] || abs(i - k) == abs(x[i] - x[k])) {
return 1;
}
}
return 0;
}
void Queue(int n) { //n皇后n行n列
int *x = new int[n] {-1};
int k = 0; //从第0行开始
while(k >= 0) {
x[k]++;
while(x[k] < n && Place(k, x) == 1) {
x[k]++;//找到第k行皇后能放的列
}
if(x[k] < n && k == n - 1) {
for(int i = 0; i < n; i++) {
cout << x[i] + 1 << endl;
}
cout << "找到" << endl;
return;
}
if(x[k] < n && k < n) { //皇后还没放完
k++;//放下一行
} else {
x[k--] = -1; //回退重新寻找上一行皇后位置
}
}
cout << "无解" << endl;
}
int main() {
Queue(8);
return 0;
}