import copy
class Solution:
def solveNQueens(self, n: int):
res = []
squre = [[0 for i in range(n)] for j in range(n)]#皇后的攻击范围
sit = [['.' for i in range(n)] for j in range(n)] #皇后的位置
self.backtrace(0, n, sit, squre, res)
tmp = []
a = []
for i in range(len(res)):
for j in range(n):
tmp.append(''.join(res[i][j]))
a.append(tmp)
tmp = []
return a
#k:第几行
#i:第几列
def backtrace(self, k, n, sit, squre, res):
if k == n:
#print([2]+sit)
res.append(copy.deepcopy(sit))
return
for i in range(n):
if squre[k][i] == 0:
tmp_squre = copy.deepcopy(squre)
sit[k][i] = 'Q'
self.put_Queen(k, i, squre)
self.backtrace(k+1, n, sit, squre, res)
squre= tmp_squre
sit[k][i] = '.'
def put_Queen(self, x, y, squre):
dx = [-1,1,0,0,-1,-1,1,1]
dy = [0,0,-1,1,-1,1,-1,1]
squre[x][y] = 1
for i in range(1, len(squre)):
for j in range(8):
new_x = x + i * dx[j]
new_y = y + i * dy[j]
if new_x >= 0 and new_y >= 0 and new_x <len(squre)and new_y < len(squre):
squre[new_x][new_y] = 1
51. N皇后
最新推荐文章于 2024-08-05 01:31:51 发布