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

问题

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

709432-20170529221903180-1839728461.jpg

分析

为了简化问题,考虑到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])

效果图

709432-20170529221841539-784035528.jpg

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android实用代码七段(五)

前言 每次分享意味着每次都有进步,本系列以实用为主,欢迎和我分享和推荐好用的代码段~~声明欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com农民伯伯: http://over140.cnblogs.com 正文 1、展开、收起…

ceph Luminous版手动安装零散记录

1.安装必要的依赖包,关防火墙,向/etc/hosts内添加域名等 2.安装ceph 配置yum源 (如果嫌慢,可以配置cachedir/home/yum/$basearch/$releasever和keepcache1两个参数,在第一次安装时将安装包下载到本地做成yum源,给后面的…

C#最简单最完整的webservice实例

我做java,但最近接触crm所以必须研究一下C#中的webservice以备后用,其实就是个新手,哈哈,这个实例是我在参考了网上诸多不完整的例子的情况下,自己摸索完成的。期间遇到过一系列的棘手的问题,经过个人努力终…

51 Nod 1007 正整数分组【类01背包】

1007 正整数分组 基准时间限制:1 秒 空间限制:131072 KB 分值: 10难度:2级算法题将一堆正整数分为2组,要求2组的和相差最小。例如:1 2 3 4 5,将1 2 4分为1组,3 5分为1组,两组和相差1…

iOS富文本

iOS富文本 背景:前些天突然想做一个笔记本功能,一开始,觉得挺简单的呀,一个UITextView,网络缓存也不干了,直接本地NSUserDefault存储,然后完事了,美工,弄几张好看的图片,…

SQL编程题-----1

首先,题目给出这个数据库表格 要求写出SQL语句使之变成如下表格 解决方法: SELECT t1.Rq,t1.胜,t2.负 FROM //t1和t2是自己命的新表格的名字 (SELECT Rq,COUNT(*) AS 胜 //As 胜意思是输出结果时列名为”胜“FROM testtableWHERE Sh…

六角填数---第五届蓝桥杯

/** 如图【1.png】所看到的六角形中,填入1~12的数字。使得每条直线上的数字之和都同样。图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?请通过浏览器提交答案。不要填写多余的内容。*/ public class 六角填数 {…

linux命令编写,编写简单的linux命令

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?又到了周四分享环节,鉴于最近在看linux编程实践,所以就的讲一下如何编写一个简单的who命令。PPTManual PageManual Page 也就是大家常用的m…

linux不登录用户就关机,Linux无法被远程登录;用户的关机, 重启,注销,新增用户,删除用户...

不能使用xshell连接到我的Linux服务器通过再windows的cmd中ping了我的Linux地址,发现网络不通。查看百度发现是因为网络没有选桥接模式,然后选完桥接模式告诉我:然后发现没有虚拟网卡,原因是之前装过vm没有卸载干净,使…

程序员的国庆节如何安排,你想好了吗?

2019独角兽企业重金招聘Python工程师标准>>> 就要国庆放假了,国庆节是旅游的黄金期,同时也是我们买买买的幸福期,作为一名技术开发,除了要安排假期旅游行程外也不要忘记提升自己,准备好学习计划&#xff0c…

微服务实战(一):微服务架构的优势与不足

本文讲的是微服务实战(一):微服务架构的优势与不足,【编者的话】本文来自Nginx官方博客,是微服务系列文章的第一篇,主要探讨了传统的单体式应用的不足,以及微服务架构的优势与挑战。正如作者所说…

linux创建zip+函数,linux+shell基础知识

目录:1.路径:2.进程:3.清屏和退出当前命令操作:4.ls 参数:5.创建目录\文件\复制文件:6.查看文件内容:7.linux通配符:8.grep:9.终止命令:10.搜索文件:11.查看网…

关于浮动float属性和position:absolute属性的区别

最近返回头看了很多书籍,一直在纠结float属性和absolute绝对定位的区别和使用的情况,给大家分享一下自己的心得和体会吧。 1,float属性 float属性意义是让元素拜托独占一行的霸道总裁,成为一个普普通通的人。比如下面这个例子 如图…

Climbing Stairs

You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 分析:考虑走第n步时的情况,可以从第n-1个台阶走一步,也可以从…

高级组合技打造“完美” 捆绑后门

0x00 简介 之前写过一篇关于客户端钓鱼的文章:《使用powershell Client进行有效钓鱼》中,在使用各个Client进行测试的过程中,个人发现CHM文件是最好用的一个,但是其缺点就是会弹黑框,这样就会让被攻击者察觉。那么怎么…

Cloudera Manager内部结构、功能包括配置文件、目录位置等

2019独角兽企业重金招聘Python工程师标准>>> 问题导读 1.CM的安装目录在什么位置? 2.hadoop配置文件在什么位置? 3.Cloudera manager运行所需要的信息存在什么位置? 4.CM结构和功能是什么? 1. 相关目录 /var/log/cloud…

python 学习笔记(一)

在Windows上安装Python 首先,从Python的官方网站www.python.org下载最新的2.7.9版本,地址是这个: http://www.python.org/ftp/python/2.7.9/python-2.7.9.msi 然后,运行下载的MSI安装包,在选择安装组件的一步时&#x…

Qualcomm QXDM工具简介和log抓取

高通工具简介QXDM 简介QXDM 安装QXDM 激活QXDM 使用AT打开Diagnostic口 QXDM 配置1 Message View ConfigurationMessage PacketsLog PacketsLog PacketsOTAEvent ReportsStrings2 Log View Config3 QXDM-保存配置文件4 QXDM-导入配置文件QPST 端口配置QXDM 抓取log QXDM LOG保存…

layout_gravity

layout_gravity——当前View,本身,在父一级的控件所分配的显示范围内的,对齐方式常用在: 当前控件(在父一级LineLayout所分配给其的显示范围内)的对齐方式需要注意的是,如果TableRow的gravity确…

洗衣机洗涤部分c语言程序,51单片机洗衣机控制板及C语言程序

51单片机洗衣机控制板及C语言程序,该控制板单片机采用AT89C51单片机,所设计全自动洗衣机功能有:标准洗衣、经济洗衣、单独洗衣以及排水四种洗衣等四种方式,有强洗、弱洗及运行/暂停、显示及报警功能,程序利用利用Protues仿真软件观…