import copy
class 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 True
if __name__ == '__main__':
s = Solution()
print s.solveNQueens(4)
LintCode:N皇后问题
最新推荐文章于 2018-07-11 22:06:29 发布