NQueen日記 2022/08/30

8月30日

枝刈りを追加した。
追加前よりなぜか遅くなった。
symmetryOpsのロジックを変えると速くなるだろうか。
枝刈りを追加することによって回転対称チェック、ミラー判定を減らせるはずなのでsymmetryOpsを軽くできるはず。

枝刈り追加前
15:      2279184          285095            2.43
16:     14772512         1847425           12.01
17:     95815104        11979381         1:12.26
枝刈り追加後
15:      2279184          285095            2.18
16:     14772512         1847425           12.55
17:     95815104        11979381         1:20.44

1行目角にクイーンがある場合はミラー判定だけ必要
ミラー判定についても、主対角線鏡像のみを判定すればよい

    if(row<BOUND1) {
      bitmap&=~2; // bm|=2; bm^=2; (bm&=~2と同等)
    }

1行目角にクイーンが無い場合、クイーン位置より右位置の8対称位置にクイーンを置くことはできない

    //【枝刈り】上部サイド枝刈り
    if(row<BOUND1){             	
      bitmap&=~SIDEMASK;
    //【枝刈り】下部サイド枝刈り
    }else if(row==BOUND2) {     	
      if((down&SIDEMASK)==0){ return; }
      if((down&SIDEMASK)!=SIDEMASK){ bitmap&=SIDEMASK; }
    //【枝刈り】最下段枝刈り
    }else if(row == size-1){
      bitmap&=~LASTMASK;
    }

書籍の紹介

NQueen日記 2022/09/02

NQueen日記 2022/09/02

NQueen日記 2022/08/29

NQueen日記 2022/08/29