八皇后-位运算

 

#include<stdio.h>
#include 
"limit.h"
int row,x,y,ans;
int n;

void dfs(int i)
{    int j,tp;
     
if(i>=n) {++ans;return;}
     
for(j=0;j<n;++j)
      
if(!((1<<j)&row)&&!((1<<(i+j)&x))&&!((1<<(n-1+i-j)&y)))
      
{     row+=1<<j;
            x
+=1<<(i+j);
            y
+=1<<(n-1+i-j);
              dfs(i
+1);
            row
-=1<<j;
            x
-=1<<(i+j);
            y
-=1<<(n-1+i-j);
      }

}

int main()
{     _time T;
      
while(1)
      
{         scanf("%d",&n); 
                T.begin();
                row
=x=y=ans=0;
                dfs(
0);
                T.end();
                printf(
"%d\n",ans);
      }

      
return 0;
}

posted on 2010-08-09 18:52 胡争 阅读(358) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理


<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

导航

统计

常用链接

留言簿

随笔分类

随笔档案

ACMer_Blog

搜索

最新评论