[leetcode]N-Queens @ Python


原題地址:https://oj.leetcode.com/problems/n-queens/

題意:經典的N皇后問題。

解題思路:這類型問題統稱為遞歸回溯問題,也可以叫做對決策樹的深度優先搜索(dfs)。N皇后問題有個技巧的關鍵在於棋盤的表示方法,這里使用一個數組就可以表達了。比如board=[1, 3, 0, 2],這是4皇后問題的一個解,意思是:在第0行,皇后放在第1列;在第1行,皇后放在第3列;在第2行,皇后放在第0列;在第3行,皇后放在第2列。這道題提供一個遞歸解法,下道題使用非遞歸。check函數用來檢查在第k行,皇后是否可以放置在第j列。

代碼:

class Solution:
    # @return a list of lists of string
    def solveNQueens(self, n):
        def check(k, j):  # check if the kth queen can be put in column j!
            for i in range(k):
                if board[i]==j or abs(k-i)==abs(board[i]-j):
                    return False
            return True
        def dfs(depth, valuelist):
            if depth==n: res.append(valuelist); return
            for i in range(n):
                if check(depth,i): 
                    board[depth]=i
                    s='.'*n
                    dfs(depth+1, valuelist+[s[:i]+'Q'+s[i+1:]])
        board=[-1 for i in range(n)]
        res=[]
        dfs(0,[])
        return res

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM