-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 [] [] =  문자 [N] [N];
        위한 ( int로 ; i가 N <I는 I = 0 ++ ) {
              ( INT의 J = 0; J <N; J ++ ) { 
                MP [I] [J] = '입니다.' ; 
            } 
        } 
        DFS (MP, N, 0, 0 );
        반환 ANS를; 
    } 

    공공  공극 DFS (  [] [] MP, INTLEN은, int로 에서 의 INT {) 여왕
         INT X = I / 렌;
        INT Y = %에서 LEN;
        경우 ((x> = LEN || y를> = LEN)) {
             경우 (! 퀸 = LEN)
                 ; 
            ANS ++ ;
            반환 ; 
        } 
        의 Dfs (MP 렌에서 + 1 , 퀸);
        경우 (OK (MP, LEN, X, Y)) { 
            MP [X] [Y] = 'Q' ; 
            DFS (MP에서, LEN, + 1, 퀸 + 1 ); 
            MP [X] [Y]= '.' ; 
        } 

    } 

    공개  부울 확인 (  [] [] MP, INT LEN, INT (X), INT의 Y)는 {
         // 행 확인 
        을 위해 ( int로 ; 나는 LEN <I가 ++ I = 0 ) {
             경우 (I == Y)가
                 계속 ;
            경우 (MP는 [X] [I] == 'Q' )
                 반환  거짓 ; 
        } 

        // COL을 확인 
        을 위해 ( int로 I = 0; I <렌; 내가 ++ ) {
             만약(I == X)
                 계속 ;
            경우 MP ([I] [Y]가 == 'Q' )
                 반환  거짓 ; 
        } 

        // X = 1, Y = 3 
        의 INT CNT = 0 ;
        int로 최대 = 0 ;
        int로 다운 = 0 ; 

         ( int로 I = Y + 1; I <렌; 내가 ++ ) { 
            최대 = (++ CNT) * -1 + X; 
            아래 = CNT * 1 + X; 

            만약 (최대 <LEN &&까지> = 0 ) {
                 //에서 System.out.println ( "MP [UP] [I] = ["+ 최대 + "["+ I + "]"); 
                경우 MP ([UP] [I] == 'Q' )
                     반환  거짓 ; 
            } 

            경우 (아래> = 0 && 아래 < LEN) {
                 // 에서 System.out.println ( "MP [DOWN] [I] = ["+ 다운 + "["+ I + "]"); 
                경우 (MP는 [DOWN] [I] == 'Q' ) {
                     반환  거짓 ; 
                } 
            } 
        } 

        // 에서 System.out.println ( "기타"); 
        CNT = 0 ;
        위한 ( int로 난 Y = - 1; I> = 0;= (++ CNT) * -1 + X; 
            아래 = CNT * 1 + X; 

            만약 (최대 <LEN &&까지> = 0 ) {
                 // 에서 System.out.println ( "MP [UP] [I] = ["+ 최대 + "["+ I + "]"); 
                경우 MP ([UP] [I] == 'Q' )
                     반환  거짓 ; 
            } 

            경우 (아래> = 0 && 아래 < LEN) {
                 // 에서 System.out.println ( "MP [DOWN] [I] = ["+ 다운 + "["+ I + "]"); 
                경우 (MP는 [DOWN] [I] == 'Q' ) {
                     반환  거짓 ;

         ; 
    } 
}

 

추천

출처www.cnblogs.com/qinyuguan/p/11324803.html