单点时限: 2.0 sec
内存限制: 256 MB
利用回溯法计算 n*n 棋盘中摆放 n 个皇后的方案数
输入格式
第一行有一个整数 k,表示有 k 个 case,
接下来 2…k+1 行,每行有一个整数,表示 n*n 的棋盘 (0 < n <= 8)。
输出格式
输出共有 k 行
每行有一个整数,即 n*n 的摆放皇后的方案数
样例
input
2
8
8
output
92
92
/*
思路:全排列后判断是否满足
*/
#include<iostream>
#include<algorithm>
using namespace std;
int count(int *a,int n) {
int ans=0;
do {
int flag=0;
for(int i = 0; i < n; i++) {
for(int j = i+1; j < n; j++) {
if(abs(a[i]-a[j])==j-i) {
flag=1;
break;
}
}
}
if(flag==0)
ans++;
} while(next_permutation(a,a+n));
return ans;
}
int main() {
int t;
cin>>t;
for(int i = 0; i < t; i++) {
int n;
cin>>n;
int a[n];
for(int j = 0; j<n; j++)
a[j]=j+1;
cout<<count(a,n)<<endl;
}
return 0;
}