LintCode:N皇后问题

来源:互联网 发布:制作搞笑图片软件 编辑:程序博客网 时间:2024/05/16 18:19

LintCode:N皇后问题

import copyclass Solution:    """    Get all distinct N-Queen solutions    @param n: The number of queens    @return: All distinct solutions    """    def solveNQueens(self, n):        # write your code here        self.n = n        self.x = [0 for i in range(n)]        self.ans = []        self.backtrak(0)        ans_sum = len(self.ans)        res = [[['.' for i in range(n)] for i in range(n)] for i in range(ans_sum)]        for i in range(ans_sum):            for j in range(self.n):                res[i][j][self.ans[i][j]] = 'Q'        r_res = []        for res_list in res:            tmp_l = []            for i in range(n):                tmp_s = ''                for j in range(n):                    tmp_s += res_list[i][j]                tmp_l.append(tmp_s)            r_res.append(tmp_l)        return r_res    def backtrak(self, t):        if t == self.n:            self.ans.append(copy.copy(self.x))        else:            for i in range(self.n):                self.x[t] = i                if self.place(t):                    self.backtrak(t+1)    def place(self, k):        for j in range(k):            if abs(self.x[k]-self.x[j]) == abs(k-j) or self.x[j] == self.x[k]:                return False        return Trueif __name__ == '__main__':    s = Solution()    print s.solveNQueens(4)
0 0