递归的经典题目。。。
#include"stdio.h" #include"string.h" #include"math.h" #define N 20 int a[N],b[N]; int n,sum; int judge(int x) { int i; for(i=1;i<x;i++) { //同列或同在对角线上,返回0 if(b[i]==b[x]||abs(x-i)==abs(b[x]-b[i])) return 0; } return 1; } int queen(int x) { int i; if(x>n)//如果第n个已经放好,就可以放第n+1个了。。。 sum++; else { for(i=1;i<=n;i++) { b[x]=i; if(judge(x)) queen(x+1); } } return sum; } int main() { int i; for(i=1;i<=10;i++) { n=i; sum=0; memset(b,0,sizeof(b)); a[i]=queen(1);//从1开始递归 } while(scanf("%d",&n)&&n) printf("%d\n",a[n]); return 0; }