Leetcode 51. N-Queens

參考別人的算法做出了n皇后,開心。n皇后本質是求矩陣中如何放棋子,使每行每列,斜著的沒有同時放兩顆棋子。
用一維數(shù)列記錄棋子的位置,例如 [1,2,3,0]就表示4*4的期盼中,第一行放在第一列,第二行放第二列,第三行放第三列,第四行放第零列。然后用dfs和backtracking去放每一行,直到放到最后一行。
python代碼:

class Solution:
    def solveNQueens(self, n):
        """
        :type n: int
        :rtype: List[List[str]]
        """
        pos = [-1] * n
        usedcol = set()
        useddia = set()
        output = []
        self.dfs(n, pos, usedcol, useddia, output, 0)
        res = []
        for i in range(len(output)):
            res.append([])
            for j in output[i]:
                string = ['.']*n
                string[j] = 'Q'
                res[i].append(''.join(string))
        return res
    
    def dfs(self, n, pos, usedcol, useddia, output, index):
        if index >= n:
            output.append(list(pos))
            return
        for i in range(n):
            if i not in usedcol and not self.isdia(index, i, useddia):
                pos[index] = i
                usedcol.add(i)
                useddia.add((index, i))
                self.dfs(n, pos, usedcol, useddia, output, index+1)
                usedcol.remove(i)
                useddia.remove((index, i))
        return
    def isdia(self, i, j, useddia):
        for pos_x, pos_y in useddia:
            if abs(i - pos_x) == abs(j - pos_y):
                return True
        return False
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容