#include<stdio.h>
#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
int a[20];
int n;
int sum = 0;
void show() {
for (int i = 0; i < n; i++) {
printf("%d ", a[i]+1);
}
printf("\n");
}
bool place(int i, int j) {
if (i == 0) return true;
else {
int k = 0;
while (k < i) {
if (j == a[k] || abs(k - i) == abs(a[k] - j)) {
return false;
}
k++;
}
return true;
}
}
void queen(int i) {
if (i > n - 1) {
if (sum++ < 3) {
show();
}
}
else {
for (int j = 0; j < n; j++) {
if (place(i, j)) {
a[i] = j;
queen(i + 1);//探索下一行
}
}
}
}
int main() {
cin >> n;
queen(0);
printf("%d", sum);
return 0;
}
这是按照我们算法书上写的,为什么会超时吗?