码迷,mamicode.com
首页 > 其他好文 > 详细

P1562 还是N皇后

时间:2017-10-20 18:42:51      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:log   ace   cin   style   i++   div   ret   color   getchar   

P1562 还是N皇后
原来,就会位运算搞八皇后,当复习一下。
可行的位置是1,其他是0
比如11011
到下一行的时候,对应的左斜线和右斜线要移一位

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 #include<algorithm>
 5 #include<cmath>
 6 #include<ctime>
 7 #include<cstring>
 8 #define inf 2147483647
 9 #define For(i,a,b) for(register int i=a;i<=b;i++)
10 #define p(a) putchar(a)
11 #define g() getchar()
12 //by war
13 //2017.10.19
14 using namespace std;
15 int n;
16 char a[100][100];
17 int sum;
18 int tot;
19 int lim;
20 int t[1000];
21 void in(int &x)
22 {
23     int y=1;
24     char c=g();x=0;
25     while(c<0||c>9)
26     {
27     if(c==-)
28     y=-1;
29     c=g();
30     }
31     while(c<=9&&c>=0)x=x*10+c-0,c=g();
32     x*=y;
33 }
34 void o(int x)
35 {
36     if(x<0)
37     {
38         p(-);
39         x=-x;
40     }
41     if(x>9)o(x/10);
42     p(x%10+0);
43 }
44 
45 void test(int row,int left,int right,int c)
46 {
47     int pos,p=0;
48     if(row!=lim)
49     {
50         pos=lim&~(row|left|right|t[c]);
51         while(pos!=0)
52         {
53             p=pos&-pos;
54             pos=pos-p;
55             test(row+p,left+p<<1,right+p>>1,c+1);    
56         }
57     }
58     else
59     sum++;
60 }
61 
62 int main()
63 {
64     in(n);
65     lim=(1<<n)-1;
66     For(i,1,n)
67       For(j,1,n)
68         cin>>a[i][j];
69     For(i,1,n)
70       for(int j=n;j>=1;j--)
71         if(a[i][j]==.)
72            t[i]+=(1<<(n-j));
73     test(0,0,0,1);
74     o(sum);
75      return 0;
76 }

 

P1562 还是N皇后

标签:log   ace   cin   style   i++   div   ret   color   getchar   

原文地址:http://www.cnblogs.com/war1111/p/7700319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!