八皇后问题的描述大致意思是在8*8的棋盘上摆放8个皇后,让其刚开始无法直接相互攻击,由八皇后问题可以推出n皇后
因为皇后是每一行只放一个,所以不考虑横向攻击,只考虑纵向及对角线上的攻击
具体步骤请看代码
#include<stdio.h>
#include<string.h>
int a[15],tot,n;
//从0行0列开始
void search(int cur){
int i,j;
if(cur == n)//此时已经遍历完成一种方法
tot++;
else for(i=0;i<n;i++){
int ok = 1;
a[cur] = i;//在cur行i列放上一个皇后
for(j = 0; j < cur; j++)//判断与之前几行的皇后是否冲突
if(a[cur] == a[j] || cur-a[cur] == j-a[j] || cur+a[cur] == j + a[j]){//第一个判断条件是在该列上有没有皇后,其余两个是判断在主对角线及副对角线上有没有有皇后
ok = 0;
break;
}
if(ok)//如果符合条件则则继续下一行
search(cur+1);
}
}
int main(){
while(scanf("%d",&n)==1){
//初始化
memset(a,0,sizeof(a));
tot = 0;
search(0);//从0行0列开始
printf("%d\n",tot);
}
return 0;
}