LeetCode-51.N-Queens
阿新 • • 發佈:2018-12-12
0.原題
The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.
Given an integer n, return all distinct solutions to the n-queens puzzle.
Each solution contains a distinct board configuration of the n-queens' placement, where 'Q'
and '.'
Example:
Input: 4
Output: [
[".Q..", // Solution 1
"...Q",
"Q...",
"..Q."],
["..Q.", // Solution 2
"Q...",
"...Q",
".Q.."]
]
Explanation: There exist two distinct solutions to the 4-queens puzzle as shown above.
1.程式碼
class Solution: def solveNQueens(self, n): """ :type n: int :rtype: List[List[str]] """ self.n = n self.state1 = [True for _ in range(n)] self.state2 = [True for _ in range(2*n-1)] self.state3 = [True for _ in range(2*n-1)] self.one_result = [] self.result = [] self.fun(0) return self.result def fun(self,row): if row == self.n: r = self.one_result.copy() self.result.append(r) return 0 else: for column in range(self.n): if self.state1[column] and self.state2[row+column] and self.state3[row-column+self.n-1]: self.state1[column] = False self.state2[row+column] = False self.state3[row-column+self.n-1] = False self.one_result.append(self.place_queen(column)) self.fun(row+1) self.one_result.pop() self.state3[row-column+self.n-1] = True self.state2[row+column] = True self.state1[column] = True def place_queen(self,column): s ='' for i in range(self.n): if i == column: s += 'Q' else: s += '.' return s
2.思路
本題思路與之前寫過的八皇后問題完全相同,區別僅僅在皇后數量和輸出格式上,本文不在贅述。