class Solution:
def isValid(self, board,idx_i,idx_j):
n = len(board)
for k in range(n):
# 判断有没有在同一行的
if board[idx_i][k] == "Q":
return False
# 判断有没有在同一行的
if board[k][idx_j] == "Q":
return False
i = idx_i
j = idx_j
while i >=0 and i<n and j>=0 and j<n :
if board[i][j] == "Q" :
return False
j+=1
i+=1
i = idx_i
j = idx_j
while i >=0 and i<n and j>=0 and j<n :
if board[i][j] == "Q" :
return False
j-=1
i-=1
i = idx_i
j = idx_j
while i >=0 and i<n and j>=0 and j<n :
if board[i][j] == "Q":
return False
j+=1
i-=1
i = idx_i
j = idx_j
while i >=0 and i<n and j>=0 and j<n :
if board[i][j] == "Q":
return False
j-=1
i+=1
return True
def solveNQueens(self, n: int) -> List[List[str]]:
board = []
for i in range(n):
temp = []
for j in range(n):
temp.append(".")
board.append(temp)
result = []
def dfs(m,board):
nonlocal n
if m == n:
tmp=[]
for i in range(n):
tmp.append("".join(board[i]))
result.append(tmp)
return
for j in range(n):
if self.isValid(board, m, j):
board[m][j]="Q"
dfs(m+1,board)
board[m][j]="."
dfs(0,board)
return result
N皇后问题,暴力回溯算法
最新推荐文章于 2021-01-05 23:37:14 发布