シンプルなバックのn-クイーンズ(nは女王)問題

パッケージcom.main。

輸入java.util.LinkedList; 

パブリック クラスNOQUEUE { 

    公共のLinkedList <ノード> getQueue(int型N){ 
        LinkedListの <ノード>キュー= 新しい LinkedListの<ノード> ();
        INT、M = 0 
        ブールのp =  ;  // 是否需要向上回溯
        ながら(M < N){
             場合(M == 0 ){ 
                ノードQは = 新しいノード(00 ); 
                queues.add(Q)。
                M ++; 
            } 
            IF(N-> 0 ){ 
                ノードQ = queues.getLast();
                 IF (P){ 
                    P = falseに ; // デフォルト見つからない
                    ためにint型 I = 0 ; I <N-私は++ ){ 
                        ノードQ1を = 新新ノード(q.x + 1 、I);
                         // 比較
                        IF(checkQueue(Q1を、キュー)){   // 次のトラックに結果を見つける
                             queues.add(Q1)を、
                            メートル ++ ; 
                            P= trueにBREAK ; 
                        } 
                    } 
                }  { // なしの結果は上向きバック見つかりません 
                    Q = queues.removeLastを();   // 最後のものが取り出し
                    のためにINT I = q.y + 1 ; Iは、N <; Iは++ ){ 
                        ノードQL = 新しい新しいノード(QX、I);
                         IF(checkQueue(QL、キュー)){   // 結果を見つけ、隣のトラック
                             queues.addLast(Q1)を、
                            P = ;
                            破ります; 
                        } 
                    } 
                    もし(!P){ 
                        M - 
                    } 
                } 
            } 
            
        } 
        戻りキュー。
    } 
    パブリックブールcheckQueue(ノードQ1、LinkedListの<ノード> キュー){ 
        ブールB = もし(queues.size()== 0 ){
             戻りB。
        } 
        のためにint型 i = 0 ; iがqueues.sizeを()<; iは++します){
            ノードQ =キュー。取得(I);
            もし(q1.x == QX || q1.y == QY || q1.xq.x == q1.yq.y || q1.xq.x == - 1 *(q1.y-のQY)) { 
                B = 破ります; 
            } 
        } 
        戻りB。
    } 
    パブリック 静的 ボイドメイン(文字列[]引数){ 
        NOQUEUE noq = 新しいNOQUEUE()。
        INT、N = 4 
        LinkedListの <ノード> L = noq.getQueue(N)。
        以下のためののint J = 0 ; J <nであり、j ++ ){
             ためint型 I = 0 iがN <; iは++ ){ 
            ノードノード = L。取得(I);
                もし(J == node.y){ 
                    システム。うちの.print(" Q " ); 
                } { 
                    システム。うちの.print(" 1 " ); 
                } 
            }
            システム。アウト.println(); 
        } 
    } 
    クラスノード{
         int型のX;
        int型のyを。
        パブリックノード(int型 I、int型のJ){
             この .X = I。
            この .Y = J; 
        } 
        @Override 
        パブリック文字列のtoString(){
             // TODO自動生成方法スタブ
            リターン X + " " + Y。
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/qinshuipo/p/11454393.html