这题题就是n皇后,不过不超时可能比较困难,至于可能是因为一般的人都知接触过递归版的,表示那个时间和空间要求很高啊。下面我们用位运算来解决这个问题。确切的说是 Matrix67大牛的原创(再次膜拜),当然建议先看前面两篇,不然可能有点晕乎乎的。看完之后,你会发现自己提高了,呵呵。大牛已经说的很清楚了,我就不多说了,贴个C语言版的代码吧
CODE
 1max = (1 << n) -1;(n是皇后数)
 2sum = 0;//最后结果在sum中
 3void work(int row,int ld,int rd)
 4{//row是列禁止,ld是对角线禁止,rd是反对角线禁止
 5     int pos,p;
 6     if(row == max)
 7       sum++;
 8     pos = max & (~(row | ld | rd));//得到当前行的可放皇后的位置
 9     //row|ld|rd是禁止位,然后取反,在和max与就是可以放皇后的位置
10     while(0 != pos)
11       {
12         p = pos & -pos;//在可放的位置找第一个,然后测试
13         pos -= p;//把已经测试过的去掉
14         work(row+p,(ld+p)>>1,(rd+p)<<1);//移位是因为在当前行是禁位的//话,那么在下一行就是左移一位或者右移一位了
15       }

16}

17
理解了上面的代码之后,这题剩下的就是求前三个了,那个可以用递归版的,也可以用这个求不过还得加一个参数,里面在改一下,用log或者long10求log(2)p时注意精度,不然结果4会变成3,但是单独把3拿出来之后,4就还是4,这或许是计算机内部的原因吧,哪位路过大牛知道的告诉声,感激不尽,对于13皇后,我的才用了0.2S。而且1A,小小的兴奋下,哈哈,第一章结束了,下面是第二章,奋斗,加油。
似乎官方的是搜索,但是还没看,往上应该有的,就不传上来了,如果要的话,留邮箱吧,不过基本也没必要了,因为那个搜索时间肯定不比这个少,但是对于学习知识到是不错的选择。