最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

解决Python基于回溯法子集树模板实现8皇后问题

来源:懂视网 责编:小采 时间:2020-11-27 14:13:35
文档

解决Python基于回溯法子集树模板实现8皇后问题

解决Python基于回溯法子集树模板实现8皇后问题:这篇文章主要介绍了Python基于回溯法子集树模板实现8皇后问题,简单说明了8皇后问题的原理并结合实例形式分析了Python回溯法子集树模板解决8皇后问题的具体实现技巧,需要的朋友可以参考下本文实例讲述了Python基于回溯法子集树模板实现8皇后问题。分享给大家
推荐度:
导读解决Python基于回溯法子集树模板实现8皇后问题:这篇文章主要介绍了Python基于回溯法子集树模板实现8皇后问题,简单说明了8皇后问题的原理并结合实例形式分析了Python回溯法子集树模板解决8皇后问题的具体实现技巧,需要的朋友可以参考下本文实例讲述了Python基于回溯法子集树模板实现8皇后问题。分享给大家
这篇文章主要介绍了Python基于回溯法子集树模板实现8皇后问题,简单说明了8皇后问题的原理并结合实例形式分析了Python回溯法子集树模板解决8皇后问题的具体实现技巧,需要的朋友可以参考下

本文实例讲述了Python基于回溯法子集树模板实现8皇后问题。分享给大家供大家参考,具体如下:

问题

8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

分析

为了简化问题,考虑到8个皇后不同行,则每一行放置一个皇后,每一行的皇后可以放置于第0、1、2、...、7列,我们认为每一行的皇后有8种状态。那么,我们只要套用子集树模板,从第0行开始,自上而下,对每一行的皇后,遍历它的8个状态即可。

代码:

'''
8皇后问题
'''
n = 8 
x = [] # 一个解(n元数组)
X = [] # 一组解
# 冲突检测:判断 x[k] 是否与前 x[0~k-1] 冲突
def conflict(k):
 global x
 for i in range(k): # 遍历前 x[0~k-1]
 if x[i]==x[k] or abs(x[i]-x[k])==abs(i-k): # 判断是否与 x[k] 冲突
 return True
 return False
# 套用子集树模板
def queens(k): # 到达第k行
 global n, x, X
 if k >= n: # 超出最底行
 #print(x)
 X.append(x[:]) # 保存(一个解),注意x[:]
 else:
 for i in range(n): # 遍历第 0~n-1 列(即n个状态)
 x.append(i) # 皇后置于第i列,入栈
 if not conflict(k): # 剪枝
 queens(k+1)
 x.pop() # 回溯,出栈
# 解的可视化(根据一个解x,复原棋盘。'X'表示皇后)
def show(x):
 global n
 for i in range(n):
 print('. ' * (x[i]) + 'X ' + '. '*(n-x[i]-1))
# 测试
queens(0) # 从第0行开始
print(X[-1], '
')
show(X[-1])

效果图

文档

解决Python基于回溯法子集树模板实现8皇后问题

解决Python基于回溯法子集树模板实现8皇后问题:这篇文章主要介绍了Python基于回溯法子集树模板实现8皇后问题,简单说明了8皇后问题的原理并结合实例形式分析了Python回溯法子集树模板解决8皇后问题的具体实现技巧,需要的朋友可以参考下本文实例讲述了Python基于回溯法子集树模板实现8皇后问题。分享给大家
推荐度:
标签: python 子集 回溯
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top