题解 | #N皇后问题#
N皇后问题
https://www.nowcoder.com/practice/c76408782512486d91eea181107293b6
class Solution:
def Nqueen(self, n: int) -> int:
corrs = []
for i in range(n):
for j in range(n):
corrs.append((i, j, i * n + j))
d = []
self.count = 0
def fun(tmp, corrs, row_index):
if len(tmp) == n:
tmp_set = set([i[2] for i in tmp])
if tmp_set not in d:
self.count += 1
d.append(tmp_set)
return
# 每行选1个
for i in range(n):
add = True
x = row_index
y = i
k = row_index * n + y
for j in range(len(tmp)):
xx, yy, kk = tmp[j]
if x == xx or y == yy or abs(x - xx) == abs(y - yy):
add = False
break
if add:
removed_corrs = corrs[i+1:]
fun(tmp + [[x, y, k]], removed_corrs, row_index + 1)
fun([], corrs, 0)
return self.count
