八皇后

Description

在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。 
你的任务是,对于给定的N,求出有多少种合法的放置方法。 

 

Input

共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
 

Output

共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。
 

Sample Input

1 8 5 0
 

Sample Output

1 92 10
 
 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int n,tmp;
 5 int map[11];
 6 
 7 void DFS(int k)
 8 {
 9     int i,j,flag;
10     if(k==n+1)
11     {
12         tmp++;
13         return;
14     }
15     else
16     {
17         for(i=1;i<=n;++i)
18         {
19             map[k]=i;
20             flag=1;
21             for(j=1;j<k;++j)
22             {
23                 if(map[j]==i||i-k==map[j]-j||i+k==map[j]+j)
24                 {
25                     flag=0;
26                     break;
27                 }
28             }
29             if(flag)
30                 DFS(k+1);
31         }
32     }
33 }
34 
35 int main()
36 {
37     int i,m;
38     int ans[11];
39     for(n=1;n<=10;++n)
40     {
41         tmp=0;
42         DFS(1);
43         ans[n]=tmp;
44     }
45     while(scanf("%d",&m),m)
46     {
47         printf("%d\n",ans[m]);
48     }
49     return 0;
50 }
View Code

 

posted @ 2015-07-26 19:15  无解大神  阅读(230)  评论(0编辑  收藏  举报