37,742
社区成员
发帖
与我相关
我的任务
分享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