标签:
1 8 5 0
1 92 10
#include <cstdio>
#include <cstring>
int ans, n;
int an[11];
bool check(int k);
void dfs(int k);
int main(){
while(scanf("%d", &n) != EOF && n){
memset(an, 0, sizeof(an));
ans = 0;
dfs(1);
printf("%d\n", ans);
}
return 0;
}
bool check(int k){
for(int i = 1; i < k; ++i){
if(an[k] == an[i] || an[k]-an[i] == k-i || an[k]-an[i] == i-k){
return false;
}
}
return true;
}
void dfs(int k){
if(k == n+1){
++ans;
return ;
}
for(int i = 1; i <= n; ++i){
an[k] = i;
if(check(k)){
dfs(k+1);
}
}
}
#include <cstdio>
#include <cstring>
int sum, n; //n作为输入
int ans[11], an[11]; //ans存放方案数 an存放相应列的皇后所在行
bool check(int k); //校验函数
void dfs(int k); //深搜函数
int main(){
for(int i = 1; i < 11; ++i) { //先将相应的方案数算出
n = i;
memset(an, 0, sizeof(an));
sum = 0; //每一次都要赋初值
dfs(1);
ans[i] = sum; //存放对应方案数
}
while(scanf("%d", &n) != EOF && n){
printf("%d\n", ans[n]);
}
return 0;
}
bool check(int k){
for(int i = 1; i < k; ++i){
if(an[k] == an[i] || an[k]-an[i] == k-i || an[k]-an[i] == i-k){
return false;
}
}
return true;
}
void dfs(int k){
if(k == n+1){
++sum;
return ;
}
for(int i = 1; i <= n; ++i){
an[k] = i;
if(check(k)){
dfs(k+1);
}
}
}标签:
原文地址:http://blog.csdn.net/u012431590/article/details/45644573