N皇后问题 HDU - 2553

在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 }

 

上一篇:Python yield与实现


下一篇:微信小程序开发-断网重新加载问题