N皇后Java

1808阅读 2评论2011-07-14 blacksapper
分类:Java

public class sdf {
  static int upperlim;   
  static int sum; 
 
  
  //static //row
、ld和rd,分别表示在纵列和两个对角线方向的限制条件下这一行的哪些地方不能放 
 static void test( int row, int ld, int rd)   
 {   
      int pos,p;   
     if(row!=upperlim)   
     {   
         pos=upperlim&(~(row|ld|rd));   
         while(pos!=0)   
         {   
             p=pos&(-pos);//-pos
相当于 (!pos+1)结果是取出最右边的那个1。这样,p就表示该行的某个可以放子的位置 
             pos=pos-p; //
把它从pos中移除  
             test(row+p,(ld+p)<<1,(rd+p)>>1);  //
递归调用这个过程 
         }   
     }   
     else sum++;   
 }   
 public static void main (String args []) 
 {  

     upperlim=(1<<8)-1;   
     test(0,0,0);   
     System.out.println(sum);   
     
 }   
 
 
}

上一篇:文本中的字符串匹配
下一篇:第N+1个hello world-java socket

文章评论