递归和回溯_leetcode51

#coding=utf-8

class Solution(object):
def solveNQueens(self, n):
"""
:type n: int
:rtype: List[List[str]]
"""


self.col = [False for i in range(n)]
self.diaS = [False for i in range(2*n - 1)]
self.diaN = [False for i in range(2*n - 1)]



ans = []
self.res = []


self.putQueen(n,0,ans)

print self.res



# 尝试在一个n皇后的问题中,摆放第index行皇后的位置
def putQueen(self,n,index,ans):
if index == n:
self.res.append(self.generateBoard(n,ans[0:]))
# self.res.append(ans[0:])

return

# 尝试将第index行的皇后摆放在第i列
for i in range(n):
if not self.col[i] and not self.diaS[index+i] and not self.diaN[index-i+n-1]:

ans.append(i)

self.col[i] = True
self.diaS[index+i] = True
self.diaN[index-i+n-1] = True

self.putQueen(n,index+1,ans)

ans.pop()
self.col[i] = False
self.diaS[index + i] = False
self.diaN[index - i + n - 1] = False

return


def generateBoard(self,n,ans):


board = [["." for i in range(n)] for i in range(n)]

for i in range(n):
board[i][ans[i]] = "Q"

return map("".join,board)
# return board


s = Solution()
s.solveNQueens(4)
原文地址:https://www.cnblogs.com/lux-ace/p/10556951.html