#include <stdio.h> #include <math.h> const int maxn=11; int p[maxn],hashtable[maxn]={false}; int n=8; static int count=0; void generate(int index){ if(index==n+1){ bool flag = true; for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ if(abs(i-j)==abs(p[i]-p[j])) flag = false; } } if(flag) { count++; } return; } for(int i=1;i<=n;i++){ if(hashtable[i]==false){ p[index]=i; hashtable[i]==true; generate(index+1); hashtable[i]==false; } } } int main(){ //scanf("%d",&n); generate(1); printf("%d",count); return 0; }
没有对细看您里面的八皇后问题,但是您这个count++就是 一次generate 可能出现一次 +,所以次数一定是小于等于 generate 次数,您这里没有递归,就是你小于等于您的循环次数。