递归法解决皇后问题代码较为简单,多少个皇后都一样。
#include <iostream>
#include <cmath>
#define N 8
using namespace std;
//int N;
int cnt = 0;
int matrix[92][8];
int posNqueen[100];
void Nqueen(int k);
int main(){
//cin >> N;
int n,i;
Nqueen(0);
cin >> n;
for(int k = 0;k < n; ++k){
cin >> i;
for(int j = 0;j < 8; ++j){
cout << matrix[i-1][j];
// if(j < 7)
// cout << ' ';
}
cout << endl;
}
return 0;
}
void Nqueen(int k){
if(k == N){
for(int i = 0;i < N; ++i){
//cout << posNqueen[i] + 1 << ' ';
matrix[cnt][i] = posNqueen[i] + 1;
}
//cout << endl;
++cnt;
return;
}
for(int i = 0;i < N; ++i){
int j;
for(j = 0;j < k; ++j){
if(posNqueen[j] == i || abs(posNqueen[j] - i) == abs(j - k))
break;
}
if(j == k){
posNqueen[k] = i;
Nqueen(k + 1);
}
}
}