如题,程序输入n个皇后的n,输出有多少种情况(不考虑重复),此段代码从9开始没有结果,我想知道没有结果的原因
#include<stdio.h>
#include<string.h>
#include<stdbool.h>
int a[20],count=0;
bool check(int a[],int x){//判断前x行是否满足皇后不能互相攻击,x为检查到第几行
int i,j;
for(i=1;i<=x;i++){
for(j=1;j<i;j++){
if(a[j]==a[i]) return false;
if(a[j]-j==a[i]-i) return false;
if(a[j]+j==a[i]+i) return false;
}
}
return true;
}
void bahuanghou(int x,int n){//x为a[i]中的i(也就是行),x代表进行到第几行了,n为n皇后
if(a[1]>n) return;//要想象最后一种情况时会如何作为结束条件
else if(a[x]>n){
a[x-1]++;
a[x]=1;
bahuanghou(x-1,n);
}//先判断如果列超界,退行并重置列
else{//尤其注意此处else与上面的关系
if(x==n){
if(check(a,x)){
count++;
}
}//如果已经放置了n个皇后(皇后个数满了),看看它是否需要计数
if(check(a,x)&&x!=n)//不管上面记不记数都进行如下操作
bahuanghou(x+1,n);//如果皇后未满且皇后都不能互相攻击,进行下一行
else{
a[x]++;
bahuanghou(x,n);
}//皇后能互相攻击,换列并重新进行该行
}
}
int main(){
int i;
for(i=0;i<=19;i++){
a[i]=1;
}
scanf("%d",&i);
bahuanghou(1,i);
printf("%d\n",count);
}