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,一经查实,立即删除!

相关文章

Core Java Volume I — 3.6. Strings

3.6. StringsConceptually, Java strings are sequences of Unicode characters(Java的字符串是一个Unicode序列). For example, the string "Java\u2122" consists of the five Unicode characters J, a, v, a, and ?. Java does not have a…

Android实用代码七段(五)

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

oracle 自增1,oracle自增无法从1开始

问题描述我想让XH字段从1开始增加,由于是varchar类型的,所以就用这种方式,但我发现我的数据表中XH字段是从217开始增加的,为什么啊问题出现的环境背景及自己尝试过哪些方法相关代码// 请把代码文本粘贴到下方(请勿用图片代替代码)declarej number;i number;begini:1;j:1;for i …

ceph Luminous版手动安装零散记录

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

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

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

2015 UESTC 数据结构专题G题 秋实大哥去打工 单调栈

秋实大哥去打工 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59Description 天行健,君子以自强不息。地势坤,君子以厚德载物。天天过节的秋实大哥又要过节了,于是他要给心爱的妹子买礼物。但由…

oracle怎么通过sid确定表名,如何获取Oracle的SID列表

更好的方法是,如果您有权访问主机并且Oracle安装使用以下命令:lsnrctl status。这适用于Unix,Linux和Windows机器。 status命令将显示所有监听器(及其相关的SID)。C:\>lsnrctl statusLSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Pr…

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…

YTU 2924: 文件操作--二进制文件读入

2924: 文件操作--二进制文件读入 时间限制: 1 Sec 内存限制: 128 MB提交: 58 解决: 20题目描述 现有100名学生的姓名(name)、学号(num)、英语(English)、数学(Math)、语文(Chinese)成绩存储在一个二进制文件student.dic中(姓名用char[20],学号和各科成绩用int存储…

oracle 9.2.0.4,CentOS 4.7 安装Oracle 9.2.0.4的一些问题

#vi/etc/sysconfig/iptables,增加如下-A INPUT -p udp -s 0/0 -d 0/0 --dport 177 -j ACCEPT-A INPUT -p tcp -s 0/0 -d 0/0 --dport telnet -j ACCEPT-A INPUT -p tcp -s 0/0 -d 0/0 --dport ssh -j ACCEPT-A INPUT -p tcp -s 0/0 -d 0/0 --dport login -j ACCEPT-…

《机电传动控制》----学习笔记六

《机电传动控制》与其他学科的联系 1、《液压传动与气压传动》中提到的液压控制阀中的电液伺服阀与《机电传动控制》中的控制电动机里的伺服电机有着密切的联系,都要求我们对伺服系统有着很好的理解。 2、《电路理论》中电机作为独立的一章,讲到了用向量…

Oracle Imp and Exp (导入和导出) 数据 工具使用

Oracle 提供两个工具imp.exe 和exp.exe分别用于导入和导出数据。这两个工具位于Oracle_home/bin目录下。 导入数据exp 1 将数据库ATSTestDB完全导出,用户名system 密码123456 导出到c:\export.dmp中 exp system/123456ATSTestDB filec:\export.dmp fully 其中ATSTestDB为数据库…

[Oracle][Corruption]究竟哪些检查影响到 V$DATABASE_BLOCK_CORRUPTION

根据 471716.1,11g 之后,下列动作如果遇到坏块,都会输出记录到 V$DATABASE_BLOCK_CORRUPTION。- Analyze table .. Validate structure- CTAS(Create table as Select)- Export另外,这些也会记录的:RMAN > Vali…

oracle使用loop将增加十天,使用loop循环操作DML语句

---loop循环:--创建测试表:suxingPROD>create table total3(2 t1 number(8),3 t2 number(8),4 cr date default sysdate);Table created.#测试表已经创建。--查看表中原来的数据:suxingPROD>select * from total3;T1 T2 CR-…

iOS富文本

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

SQL编程题-----1

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

maven设置jdk版本

两种方式&#xff1a;一、可以修改 MAVEN 的 setting.xml 文件&#xff0c;统一修改。<profiles> <profile> <id>jdk-1.6</id> <activation> <activeByDefault>true</activeByDefault>…

获取系统时间出错oracle-,oracle 获取系统时间(转)

Oracle中如何获取系统当前时间select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) from dual;ORACLE里获取一个时间的年、季、月、周、日的函数select to_char(sysdate, yyyy ) from dual; --年select to_char(sysdate, MM ) from dual; --月select to_char(sysdate, dd ) f…

PHP环境搭建

以Apache模块运行PHP环境搭建方法 下载Apache 注意&#xff1a;在http://www.apachelounge.com/ 下载Apache&#xff0c;因为该网站提供的Apache是通过更高版本的VC编译器编译的。由于接下来我下载的PHP版本是VC11的&#xff0c;所以下载的Apache版本也是基于VC11的。 download…

Java语言中的-----访问修饰符

day04 Java语言中的----访问修饰符一、访问修饰符概述&#xff1a;访问修饰符就是对变量或者是方法或者是类的一个修饰&#xff0c;通过修饰以后实现一些必要的权限&#xff0c;主要是说明类成员如何被使用的作用。二、访问修饰符1、访问修饰符有哪些&#xff1f;访问修饰符总共…