|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#这段代码有点抽象 看不懂 请老司机帮忙讲解一下 各个for循环里的原理
def conflict(state,nextX):
nextY = len(state)
for i in range(nextY):
if abs(state - nextX) in (0,nextY - i): #比如这里的原理就十分不明白
return True
return False
def queens(num = 4,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
c = 0
for res in queens(4):
c += 1
print('Solution %d:'%c)
chest = [[0]*len(res) for i in range(len(res))]
for i in range(len(res)):
chest[res] = 1
print(chest)
print()
本帖最后由 waitforlove 于 2018-8-19 18:04 编辑
- #这段代码有点抽象 看不懂 请老司机帮忙讲解一下 各个for循环里的原理
- 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 #函数没有任何意义,都是返回False
- def queens(num = 4,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
- #注意你上面的 yield (pos,)这是个元组 所以函数返回的是列表,列表里面的成员都是元组
- c = 0
- for res in queens(4):#所以res是元组
- c += 1
- print('Solution %d:'%c)
- chest = [[0]*len(res) for i in range(len(res))]
- for i in range(len(res)):
- chest[res[i]] = 1 #所以这里res还要个索引
- print(chest)
- print()
复制代码
如你所愿
|
|