-52の特別なバックトラックLeetcode。NクイーンII(N-クイーンズII)

-52の特別なバックトラックLeetcode。NクイーンII(N-クイーンズII)

 

80%質問51でコードが、具体的なソリューションを求めている、請求項52、51中の溶液の数と同様に、51にクリック

 

 

クラスソリューション{
 INT ANS = 0 

    公共 INT totalNQueens(int型N){ 

        チャー MP [] [] = 新しい CHAR [n]は[N]。
        int型 ; iがN <I ++はiが0 = {)
             のためにINT J = 0; J <nであり、j ++ ){ 
                MP [I] [J] '' = ; 
            } 
        } 
        DFS(MP、nは、 0、0 );
        戻るANSを。
    } 

    公共 ボイド DFS(CHAR [] []融点、INTLEN、int型、中INT クイーン)は{
         INT X = I / LEN。
        INT Y =で%LEN。
        もし((X> = LEN || Y> = LEN)){
             場合(!クイーン= LEN)
                 のリターン; 
            ANS ++ ;
            返します
        } 
        のDFS(MP、LEN、で + 1 、クイーン)。
        もし(OK(MP、LEN、X、Y)){ 
            MP [X] [Y] = 'Q' 
            DFS(MPで、LEN、 + 1、クイーン+ 1 )。
            MP [X] [Y]= '' ; 
        } 

    } 

    パブリック ブール OKは、(CHAR [] [] MP、INT LEN、int型のx、int型のY){
         // 行をチェック
        するためにint型 i = 0; iがLEN <; Iは++ ){
             場合(I == y)を
                 続けますもし(MP [X] [i]を== 'Q' を返す 
        } 

        // COLをチェック
        するためにint型 i = 0; iがLEN <; iは++ ){
             もし(I == x)を
                 続けますもし(MP [I] [Y]は== 'Q' を返す 
        } 

        // X = 1、Y = 3 
        のint CNT = 0 int型アップ= 0 ;
        int型ダウン= 0 ; 

        int型 I = Y + 1、iがLEN <; iは++ ){ 
            アップ =(++ CNT)* -1 + X。
            ダウン = CNT * 1 + X。

            もし(アップ<LEN &&アップ> = 0 ){
                 //System.out.println( "MP [最大] [I] = [" +アップ+ "] [" + I + "]"); 
                もし(MP [アップ] [i]を== 'Q' を返す 
            } 

            であれば(ダウン> = 0 &&ダウン< LEN){
                 // するSystem.out.println( "MP [DOWN] [I] = [" +ダウン+ "] [" + I + "]"); 
                場合(MPは、[DOWN] [I] == 'Q' ){
                     戻り 
                } 
            } 
        } 

        // するSystem.out.println( "その他")。
        CNT = 0 ;
        以下のためにint型 iは、Y = - 1; I> = 0。=(++ CNT)* -1 + X。
            ダウン = CNT * 1 + X。

            もし(アップ<LEN &&アップ> = 0 ){
                 // するSystem.out.println( "MP [最大] [I] = [" +アップ+ "] [" + I + "]"); 
                もし(MP [アップ] [i]を== 'Q' を返す 
            } 

            であれば(ダウン> = 0 &&ダウン< LEN){
                 // するSystem.out.println( "MP [DOWN] [I] = [" +ダウン+ "] [" + I + "]"); 
                場合(MPは、[DOWN] [I] == 'Q' ){
                     戻り 

         ; 
    } 
}

 

おすすめ

転載: www.cnblogs.com/qinyuguan/p/11324803.html