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 queen(num=8, state=()):
for pos in range(num):
if not conflict(state, pos):
if len(state) == num-1:
yield (pos,)
else:
for result in queen(num, state + (pos,)):
yield result + (pos,)
for solution in queen(4):
print(solution)
相关代码已经看得差不多了,但是任然有一个问题未能解决:
在程序第一次进入代码循环至 conflict
时,state
元组是空的什么都还没有,但是:
if abs(state[i] - nextx) in (0, nexty - i):
这句中却将 state[0]
列了出来,这样明明是不能通过的但是却正常运行了!
我知道一定是我哪里理解有问题了,请各位帮我解答当第一次循环时 state
是这样解决的?
state为空时,range(nexty)为空, for循环是不执行的, 直接return False了。