在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
1 #include<stdio.h> 2 #include<math.h> 3 #include<algorithm> 4 #include<queue> 5 #include<string.h> 6 typedef long long ll; 7 using namespace std; 8 int cb,bc,s,v[14],c[14]; 9 int cc(int b); 10 void ccc(int b); 11 int main() 12 { 13 for(cb=1;cb<=10;cb++) 14 { 15 s=0; 16 ccc(1); 17 c[cb]=s; 18 } 19 while(~scanf("%d",&bc)&&bc) 20 printf("%d\n",c[bc]); 21 return 0; 22 } 23 int cc(int b) 24 { 25 for(int i=1;i<b;i++) 26 if(v[i]==v[b]||abs(v[b]-v[i])==abs(b-i)) 27 return 0; 28 return 1; 29 } 30 void ccc(int b) 31 { 32 if(b==cb+1)s++; 33 else 34 { 35 for(int i=1;i<=cb;i++) 36 { 37 v[b]=i; 38 if(cc(b))ccc(b+1); 39 } 40 } 41 }