本算法将第第x行皇后的列编号记为C[x],回溯求符合条件的tot,递归边界为从0到7(八皇后),皇后为逐行放置,cur-C[cur] == j-C[j] || cur+C[cur] == j+C[j]判断皇后是否在同一对角线上话不多说,直接上代码:
#include<stdio.h>
int tot=0,n=8,C[10];
void search(int cur){
int i,j;
if(cur == n) tot++;
else for(i=0;i<n;i++){
int ok=1;
C[cur]=i;
for(j=0;j<cur;j++)
if(C[cur] == C[j] || cur-C[cur] == j-C[j] || cur+C[cur] == j+C[j]){
ok=0;
break;
}
if(ok) search(cur+1);
}
}
int main(){
search(0);
printf("八皇后问题的解的个数为:%d\n",tot);
}