|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
尽量详细,谢谢!以下是代码
def bhh1(s,x):
y = len(s)
for i in range(y):
if abs(s[i]-x) in (0,y-i):
return False
return True
def bhh2(nums = 8,s = ()):
for y in range(nums):
if bhh1(s,y):
if len(s) == nums - 1:
yield(y,)
else:
for j in bhh2(nums,s+(y,)):
yield(y,) + j
print(list(bhh2(4)))
- def bhh1(s,x):
- '''
- s->皇后列位置元组
- x->当前皇后位置
- '''
- y = len(s) #已经放置的皇后个数
- for i in range(y):
- if abs(s[i]-x) in (0,y-i): #逐一取出已经确认的皇后位置,当前位置不能与之在同一列及两对角线上(abs绝对值)
- return False
- return True
- def bhh2(nums = 8,s = ()):
- for y in range(nums):
- if bhh1(s,y):
- if len(s) == nums - 1:#最后一个皇后位置选定
- yield(y,) #返回当前位置的结果元组
- else:
- for j in bhh2(nums,s+(y,)):
- yield(y,) + j #返回当前位置和下一个符合条件的皇后的位置的结果元组
- print(list(bhh2(4)))
复制代码
个人理解,不喜勿喷,建议看下回溯算法
|
|