Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=2553

8皇后 经典回溯题

用负数做为数组下标,稍微方便点

不打表就TLE了

Orz matrix67大牛的位运算版本

我的代码
 1 #include <stdio.h>
2 #include <string.h>
3 int v1[20],v2[20],vv3[20],*v3=vv3+10;
4 int n,ans[20],s;
5 void dfs(int x)
6 {
7 if (x>n) {s++; return;}
8 int i;
9 for (i=1;i<=n;i++)
10 if (!v1[i] && !v2[i+x] && !v3[i-x])
11 {
12 v1[i]=v2[i+x]=v3[i-x]=1;
13 dfs(x+1);
14 v1[i]=v2[i+x]=v3[i-x]=0;
15 }
16 }
17 int main()
18 {
19 memset(v1,0,sizeof(v1));
20 memset(v2,0,sizeof(v2));
21 memset(vv3,0,sizeof(vv3));
22 for (int i=1;i<=10;i++) ans[i]=-1;
23 while (scanf("%d",&n),n)
24 {
25 s=0;
26 if (ans[n]<0) dfs(1),ans[n]=s;
27 printf("%d\n",ans[n]);
28 }
29
30 }

 

posted on 2011-12-25 13:14  Qiuqiqiu  阅读(215)  评论(0编辑  收藏  举报