POJ 2754八皇后

样例输入
2
1
92
样例输出
15863724
84136275
- 思路1:
1.类比POJ1222熄灯问题,从1行出发,不断向后递归
2.递归终止条件:第一行所有的元素都用完
3.每层递归的判断条件:
本层选中元素要与之前所有元素都满足: ①行坐标i不等 ②纵坐标j不等 ③不在同一斜线上(表达式为|i₁ - i₂| = |j₁ - j₂|
,即abs(i₁, i₂) != ans(j₁, j₂)
) - code1:
#include <iostream>
#include <cmath>
using namespace std;
int Q[100];
int Result[100][10];
int N = 8;
void NQueen(int k);
int main(){
int n, f, l;
scanf("%d", &n);
NQueen(0);
while(n-- > 0){
int s;
scanf("%d", &s);
for(int j = 0; j < 8; ++j){
printf("%d", Result[s][j]);
}
printf("\n");
}
return 0;
}
int h = 1;
void NQueen(int k) {
int i;
if(k == N){
for(int i = 0; i < N; ++i)
Result[h][i] = Q[i] + 1;
h++;
return ;
}
for(int i = 0; i < N; ++i){
int j;
for(j = 0; j < k; ++j){
if(i == Q[j] || (abs(i - Q[j]) == abs(k - j))){
break;
}
}
if(j == k){
Q[k] = i;
NQueen(k+1);
}
}
}