37,743
社区成员




def conflict(state, nextX):
nextY = len(state)
for i in range(nextY):
if abs(state[i]-nextX) in (0, nextY-i):
return True
return False
def queens(num=8, state=()):
for pos in range(num):
if not conflict(state, pos):
if len(state) == num-1:
yield (pos,)
else:
for result in queens(num, state + (pos,)):
yield (pos,)+result
for line in list(queens(4)):
print line
(0, 2, 1, 1)
(0, 2, 1, 2)
(0, 2, 3, 1)
(0, 2, 3, 2)
(0, 3, 1, 1)
(0, 3, 1, 2)
(0, 3, 3, 1)
(0, 3, 3, 2)
(1, 3, 0, 0)
(1, 3, 0, 2)
(1, 3, 0, 3)
(1, 3, 2, 0)
(1, 3, 2, 2)
(1, 3, 2, 3)
(2, 0, 1, 0)
(2, 0, 1, 1)
(2, 0, 1, 3)
(2, 0, 3, 0)
(2, 0, 3, 1)
(2, 0, 3, 3)
(3, 0, 0, 1)
(3, 0, 0, 2)
(3, 0, 2, 1)
(3, 0, 2, 2)
(3, 1, 0, 1)
(3, 1, 0, 2)
(3, 1, 2, 1)
(3, 1, 2, 2)
import random
prettyprint(random.choice(list(queens(8))))
def conflict(state, nextX):
nextY = len(state)
for i in range(nextY):
if abs(state[i]-nextX) in (0, nextY-i):
return True
return False
def queens(num=8, state=()):
for pos in range(num):
if not conflict(state, pos):
if len(state) == num-1:
yield (pos,)
else:
for result in queens(num, state + (pos,)):
yield (pos,)+result