问题:
n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给定一个整数 n,返回所有不同的 n 皇后问题的解决方案。
每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。
示例 1:
输入:4
输出:[
[".Q..", // 解法 1
"...Q",
"Q...",
"..Q."],
["..Q.", // 解法 2
"Q...",
"...Q",
".Q.."]
]
解释: 4 皇后问题存在两个不同的解法。
注意:
皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。
Solution:
def solveNQueens(n
):
"""
:type n: int
:rtype: List[List[str]]
"""
def generateBoard():
board
= list()
for i
in range(n
):
row
[queens
[i
]] = "Q"
board
.append
("".join
(row
))
row
[queens
[i
]] = "."
return board
def backtrack(row
: int):
if row
== n
:
board
= generateBoard
()
solutions
.append
(board
)
else:
for i
in range(n
):
if i
in columns
or row
- i
in diagonal1
or row
+ i
in diagonal2
:
continue
queens
[row
] = i
columns
.add
(i
)
diagonal1
.add
(row
- i
)
diagonal2
.add
(row
+ i
)
backtrack
(row
+ 1)
columns
.remove
(i
)
diagonal1
.remove
(row
- i
)
diagonal2
.remove
(row
+ i
)
solutions
= list()
queens
= [-1] * n
columns
= set()
diagonal1
= set()
diagonal2
= set()
row
= ["."] * n
backtrack
(0)
return solutions
来源:力扣(LeetCode) 本题链接:https://leetcode-cn.com/problems/n-queens/