n皇后问题,使用位运算解决
生活随笔
收集整理的這篇文章主要介紹了
n皇后问题,使用位运算解决
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?
public class NQueue {public static void main(String[] args) {int n = 8;//int limit = n == 32 ? -1 :(1<<n)-1;System.out.println(num2(n));}public static int num2(int n){if(n < 1 || n>32){return 0;}// 1<<n: 1向左移動(dòng)n位, 這樣1后面有n個(gè)零,然后減去1,這樣最右邊就有n個(gè)1int limit = n == 32 ? -1 :(1<<n)-1;return process2(limit, 0,0,0);}public static int process2(int limit,int colLim,int leftDiaLim,int rightDiaLim){if(limit == colLim){return 1;}int pos = limit & (~(colLim | leftDiaLim | rightDiaLim));int mostRightOne = 0;int res = 0;while(pos != 0){mostRightOne = pos & (~pos + 1);pos = pos-mostRightOne;int nColLim = colLim+mostRightOne;int nLeftDiaLim = (leftDiaLim+mostRightOne)<<1; // 左移1位int nRightDiaLim = (rightDiaLim+mostRightOne)>>1; // 右移1位res += process2(limit, nColLim,nLeftDiaLim,nRightDiaLim);}return res;} }?
總結(jié)
以上是生活随笔為你收集整理的n皇后问题,使用位运算解决的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: <LINUX内核完全剖析:基于0.12内
- 下一篇: 《穿越计算机的迷雾》读书笔记二