题目内容:
国际象棋中的皇后可以沿着水平线,垂直线,或者斜线前进,吃掉遇到的所有棋子,
如果棋盘上有八个皇后,则这八个皇后如何相安无事的放置在棋盘上,
该题要求N皇后的放置结果共有多少种
输入描述
输入一个正整数N(N小于16)
输出描述
输出结果
输入样例
8
输出样例
国际象棋中的皇后可以沿着水平线,垂直线,或者斜线前进,吃掉遇到的所有棋子,
如果棋盘上有八个皇后,则这八个皇后如何相安无事的放置在棋盘上,
该题要求N皇后的放置结果共有多少种
输入描述
输入一个正整数N(N小于16)
输出描述
输出结果
输入样例
8
输出样例
92
代码:
#include "stdio.h"
#include "math.h"
int N,h[16],sum=0;
int judge(int num){
for(int i=1;i<num;i++){
if(h[num]==h[i]||abs(h[i]-h[num])==num-i)
{
//判断列和对角线
return 0;
}
}
return 1;
}
void dfs(int num){
for(int i=1;i<=N;i++){
h[num]=i;
if(judge(num)){
if(num==N){sum++;}
else{dfs(num+1);}
}
}
}
int main(){
scanf("%d",&N);
dfs(1);
printf("%d",sum);
return 0;
}