题目描述:
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。
每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。
示例:
输入: 4
输出: [
[".Q…", // 解法 1
“…Q”,
“Q…”,
“…Q.”],
["…Q.", // 解法 2
“Q…”,
“…Q”,
“.Q…”]
]
解释: 4 皇后问题存在两个不同的解法。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/n-queens
class Solution:
def solveNQueens(self, n):
board = [['.'] * n for _ in range(n)]
ret = []
def backtrack(board, row):
if row == len(board):
tmp_list = []
for e_row in board:
tmp = ''.join(e_row)
tmp_list.append(tmp)
ret.append(tmp_list)
return
for col in range(len(board[0])):
if not isValid(board, row, col):
continue
board[row][col] = 'Q'
backtrack(board, row+1)
board[row][col] = '.'
def isValid(board, row, col):
n = len(board)
for i in range(n):
if board[i][col] == 'Q':
return False
r_row, r_col = row, col
while r_row > 0 and r_col < n - 1:
r_row -= 1
r_col += 1
if board[r_row][r_col] == 'Q':
return False
l_row, l_col = row, col
while l_row > 0 and l_col >0:
l_row -= 1
l_col -= 1
if board[l_row][l_col] == 'Q':
return False
return True
backtrack(board, 0)
return ret
代码来源
:https://leetcode-cn.com/problems/n-queens/solution/hui-su-suan-fa-xiang-jie-by-labuladong/