52N女王II

タイトル:整数を考えるNは、戻りN個の女王の異なる解の数。

出典ます。https://leetcode-cn.com/problems/n-queens-ii/

アクトワン:独自のコードの90%以上

アイデア:特に、最初の列の中間奇数行を計算するために、偶数対称直接使用、奇数および偶数、それぞれ算出

クラスソリューション:
     DEF totalNQueens(セルフ、N-ます。int) - > int型:
        結果 = [0]
         DEFバックトラックは(half_col、行= -1、COL = 0、):
            バックの終了条件は、最後の行ならば、見つけることを示します格納された溶液
            IF行1-N - ==。 :
                 溶液= [] _ため、ソートされたCOL(クイーンズ)において:     solution.append(COL * + 'Q' * +(N '' '' - COL - 1)) results.append(溶液)#の印刷(結果) 
                。結果[0] =結果[0] + 1 戻り。+ = 1
             IF(行==
                
                
                
                
                0):
                対称線に最初に起因して、その結果場合nは奇数であり、半分だけトラバース列の
                ための COL half_col:
                     IF COLS [COL] + P [COL +ロウ] + Q [COL-行] == 0:
                        queens.add((行、COL))
                        COLS [COL] = 1つの
                        P [COL +行]。1 = 
                        Q [COL行×] = 1 
                        バックトラック(half_col、行、COL)
                        queens.remove((行、COL))
                        COLS [COL]が = 0 
                        P [COL +ロウ] = 0 
                        Q [COL-行] = 0
             他ののための COL :レンジ(N)
                     IF colsの[COL] + P [COL +ロウ] + Q [COL-行] == 0:
                        queens.add((行、COL))
                        colsの[ COL] = 1 
                        P [COL +行]。1 = 
                        Q [COL行×]。1 =
                         音符に移し、ここで特別なパラメータ、位置パラメータ通過しなければならない
                        バックトラック元の書き込みエラーである(行、COL)
                        バックトラックを(half_col、行、COL)
                        queens.remove((行、COL))
                        COLS [COL] = 0
                        P [COL +ロウ] = 0 
                        Q [COL -行] = 0 
        COLS = [0] * N- 
        P = [0] *(2 * N - 1 
        Q = [0] *(2 * N - 1 
        クイーンズ = SET()
         のiF、N%2 == 0:
            バックトラック(half_col =レンジ(INT(N / 2 )))
            戻り結果[0] * 2
         時点後にN奇数で、カラムの横断半分となって、もカラム中間横断
        他の
            バックトラック(half_col =レンジ(INT(N / 2 )))
            結果[0]結果= [0] * 2
             、中央数はINT(N / 2)は、nが奇数であることに注意され 
            バックトラック(half_col = INT(N / 2 )])
             戻り結果[0]
 IF  __name__ == ' __main__ ' 
    duixiang = ソリューション()
    WW = duixiang.totalNQueens(1。 印刷' 結果:'、WW)
コードの表示

 

 

おすすめ

転載: www.cnblogs.com/xxswkl/p/11969867.html