深搜
用一维数组表示皇后的放置情况
注意边界条件和剪枝条件
#include<string.h>
#include<stdio.h>
#include<iostream>
#include<cmath>
using namespace std;
const int maxN=15;
int d[maxN];
int n;//number of queens
int sum;
int sum1[15];
int place(int x){
for(int i=0;i<x;i++){
if(abs(x-i)==abs(d[x]-d[i])||d[x]==d[i]){return false;}
}
return true;
}
void backtrack(int s)
{
if(s>=n)sum+=1;
else{
for(int y=0;y<n;y++){
d[s]=y;
if(place(s))backtrack(s+1);
}
}
}
int main()
{
for(int i=0;i<=10;i++){
n=i;
sum=0;
memset(d,0,sizeof(d));
backtrack(0);
sum1[i]=sum;
}
int k;
while(cin>>k&&k){
cout<<sum1[k]<<endl;
}
return 0;
}