RosettaCodeData/Task/N-queens-problem/Python/n-queens-problem-6.py

24 lines
620 B
Python
Raw Permalink Normal View History

2019-09-12 10:33:56 -07:00
def queens(n):
2015-11-18 06:14:39 +00:00
a = list(range(n))
up = [True]*(2*n - 1)
down = [True]*(2*n - 1)
def sub(i):
if i == n:
yield tuple(a)
else:
for k in range(i, n):
2019-09-12 10:33:56 -07:00
j = a[k]
2015-11-18 06:14:39 +00:00
p = i + j
q = i - j + n - 1
if up[p] and down[q]:
up[p] = down[q] = False
2019-09-12 10:33:56 -07:00
a[i], a[k] = a[k], a[i]
2015-11-18 06:14:39 +00:00
yield from sub(i + 1)
up[p] = down[q] = True
2019-09-12 10:33:56 -07:00
a[i], a[k] = a[k], a[i]
2015-11-18 06:14:39 +00:00
yield from sub(0)
2019-09-12 10:33:56 -07:00
#Count solutions for n=8:
sum(1 for p in queens(8))
92