N皇后问题

作者: 只为此心无垠 | 来源:发表于2018-03-19 16:01 被阅读2次

LintCode题目地址

def isConflict(self,index):
        nextY = len(self.result)
        for i in range(nextY):
            if abs(self.result[i] - index) in (0, nextY - i):
                return True
        return False


    def drawChess(self):
        cols = []
        n = len(self.result)
        for i in range(n):
            r = ['.'] * n
            r[self.result[i]] = 'Q'
            cols.append(''.join(r))
        return cols

    def searchNQueens(self, n):
        if len(self.result) == n:
            self.resultAll.append(self.drawChess())
            return

        for index in range(n):
            if self.isConflict(index) == True:
                continue
            self.result.append(index)
            self.searchNQueens(n)
            self.result.pop()

    def solveNQueens(self, n):
        self.resultAll = []
        self.result = []
        self.searchNQueens(n)
        return self.resultAll

注释版本

# 判断新加入的index,是否与已存在的冲突
    def isConflict(self,index):
        nextY = len(self.result)
        for i in range(nextY):
            if abs(self.result[i] - index) in (0, nextY - i):
                return True
        return False

    #将数组画出来
    def drawChess(self):
        cols = []
        n = len(self.result)
        for i in range(n):
            r = ['.'] * n
            r[self.result[i]] = 'Q'
            cols.append(''.join(r))
        return cols

    def searchNQueens(self, n):
        #符合条件就加入到self.resultAl
        if len(self.result) == n:
            self.resultAll.append(self.drawChess())
            return

        for index in range(n):
            #先判断将要加入的元素,是否和已存在的冲突
            if self.isConflict(index) == True:
                continue
            self.result.append(index)
            self.searchNQueens(n)
            self.result.pop()

    def solveNQueens(self, n):
        self.resultAll = []
        self.result = []
        self.searchNQueens(n)
        return self.resultAll

相关文章

  • 回溯之N皇后

    N皇后问题:在 n x n 的棋盘上放置 N 个皇后,使其不能相互攻击。 1. 问题分析 皇后相互攻击是指:在皇后...

  • 风云的ARTS打卡(第四周)

    第4周 Algorithm: N皇后问题 n皇后问题研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间...

  • lintcode-N皇后问题

    n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。 给定一个整数n,返回所有不同的n皇后问题的...

  • lintcode N皇后问题

    n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击。给定一个整数n,返回所有不同的n皇后问题的解...

  • LeetCode 52. N皇后 II(N-Queens II)

    52. N皇后 II N皇后 IIn 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之...

  • N皇后问题

    N皇后问题

  • 第16章 抽象深度优先搜索

    1、2n皇后问题 算法分析 与n皇后问题类似,如下是n皇后问题的分析,时间复杂度 按行继续比遍历,其中col[x]...

  • LeetCode 51. N皇后(N-Queens)

    51. N皇后 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 ...

  • 52. N皇后 II

    n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。N皇后 II上图为...

  • LeetCode 51. N-Queens

    Leetcode : N-QueensDiffculty:Hard N皇后问题,对八皇后问题的扩展,典型的回溯法算...

网友评论

    本文标题:N皇后问题

    本文链接:https://www.haomeiwen.com/subject/mwiuqftx.html