问题

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 xfor 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 Truereturn False# 套用子集树模板
def queens(k): # 到达第k行global n, x, Xif 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 nfor i in range(n):print('. ' * (x[i]) + 'X ' + '. '*(n-x[i]-1))# 测试
queens(0) # 从第0行开始print(X[-1], '\n')
show(X[-1])

效果图

本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/6919204.html,如需转载请自行联系原作者

python 回溯法 子集树模板 系列 —— 1、8 皇后问题相关推荐

  1. python 回溯法 子集树模板 系列 —— 3、0-1背包问题

    问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入背包的物品,使得放入背包的物品的总价值为最大? 分析 显然,放入背包的物品,是N个物品的所有子集的其 ...

  2. python 回溯法 子集树模板 系列 —— 5、取物搭配问题

    问题 有5件不同的上衣,3条不同的裤子,4顶不同的帽子,从中取出一顶帽子.一件上衣和一条裤子作为一种搭配,问有多少种不同的搭配? 分析 换个角度看,现有头.身.腿三个元素,每个元素都有各自的几种状态. ...

  3. python 回溯法 子集树模板

    回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足 ...

  4. python回溯算法全排列_python 回溯法 子集树模板 系列 —— 11、全排列

    问题 实现 'a', 'b', 'c', 'd' 四个元素的全排列. 分析 这个问题可以直接套用排列树模板. 不过本文使用子集树模板.分析如下: 一个解x就是n个元素的一种排列,显然,解x的长度是固定 ...

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

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

  6. python找零钱问题_Python基于回溯法子集树模板解决找零问题示例

    本文实例讲述了Python基于回溯法子集树模板解决找零问题.分享给大家供大家参考,具体如下: 问题 有面额10元.5元.2元.1元的硬币,数量分别为3个.5个.7个.12个.现在需要给顾客找零16元, ...

  7. python回溯方法的模板_Python基于回溯法子集树模板解决0-1背包问题实例

    本文实例讲述了Python基于回溯法子集树模板解决0-1背包问题.分享给大家供大家参考,具体如下: 问题 给定N个物品和一个背包.物品i的重量是Wi,其价值位Vi ,背包的容量为C.问应该如何选择装入 ...

  8. python全排列问题_Python基于回溯法子集树模板解决全排列问题示例

    本文实例讲述了Python基于回溯法子集树模板解决全排列问题.分享给大家供大家参考,具体如下: 问题 实现 'a', 'b', 'c', 'd' 四个元素的全排列. 分析 这个问题可以直接套用排列树模 ...

  9. python棋盘放米问题_Python基于回溯法子集树模板解决马踏棋盘问题示例

    本文实例讲述了Python基于回溯法子集树模板解决马踏棋盘问题.分享给大家供大家参考,具体如下: 问题 将马放到国际象棋的8*8棋盘board上的某个方格中,马按走棋规则进行移动,走遍棋盘上的64个方 ...

最新文章

  1. 实验一 编程 Hello World
  2. 文末福利 | 只送给真正想学英语的你!
  3. [译]RxJS文档04——Observer 观察者
  4. 一种集各种优点于一身的技术面试方式--转
  5. DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文)、CNN优化技术、调参学习实践、CNN经典结构及其演化、案例应用之详细攻略
  6. 【Android】事件传递:向下拦截,向上处理
  7. JDK源码解析之 Java.lang.StringBuilder
  8. MySQL中文参考手册--8.MySQL教程--8.3 常用查询的例子
  9. SQL 删除数据-select在当前表字段作为条件
  10. c语言在线翻译器,【C语言】【window】--在线翻译器.doc
  11. 手机Camera理论
  12. 箕星药业任命罗万里任CEO;​赛诺菲成2024年巴黎奥运会和残奥会的高端合作伙伴 | 医药健闻...
  13. gurobi中的lp
  14. MongoDB,为何能在NoSQL家族里异军突起?
  15. 企业域名是什么?域名代表网站流量
  16. 网络分布式文件系统-MFS搭建以及部署详解
  17. 基于Echarts构建大数据招聘岗位数据可视化大屏
  18. matlab黎曼问题roe格式,Godnov_HLLC 解1D黎曼问题的有限体积法,使用Roe格式做近似 Algorithm 数学计算 238万源代码下载- www.pudn.com...
  19. pandas日期 识别周
  20. noip模拟赛 三角形

热门文章

  1. python网页保存为图片_使用Python保存网页上的图片或者保存页面为截图
  2. 新入驻博客园立一个flag
  3. union 和 union all 有什么不同?
  4. 恢复快速启动栏里的“显示桌面”图标
  5. Vue多字段下的非空判断(new Promise)
  6. Vue — 第一天(极速入门)
  7. 网络经济与企业管理(第 2 章:企业战略管理)
  8. 第五节:EF Core中的三类事务(SaveChanges、DbContextTransaction、TransactionScope)
  9. 【LOJ】#2184. 「SDOI2015」星际战争
  10. unity深度查找某个子物体和遍历所有子物体方法