八皇后问题:

  把N个皇后,放在N*N的棋盘上面,从第一行往下放,每个皇后占一行,同时,每个皇后不能处在同一列,对角线上,有多少种放置方法。

思路:

  典型的回溯问题:

    1.当要放置最后一个皇后时候,默认前N-1个皇后已经全部放置好了,那么验证在第N行上的每个位置是否可行,即是否与之前的皇后在同一列或者对角线即可;

    2.如果放置的不是最后一个皇后,则回溯。回溯至刚开始放第一个元素时候,然后不断的返回上一层。每一层都认为下一层传递给自己的是正确的信息

 def isconflict(state, nx):
"""
验证下一个要放置的皇后是否与之前的皇后冲突
"""
ny = len(state)
for i in range(ny):
if abs(state[i]-nx) in (, ny-i):
return True
return False def queens(num=, state=[]):
"""
主处理函数
"""
for p in range(num):
if not isconflict(state, p):
if len(state) == num-:
yield p
else:
for result in queens(num, state+[p]):
yield [result, p] def play3(l):
"""
把返回的结果列表中的子列表裂解开
"""
try:
try: l+''
except TypeError: pass
else: raise TypeError
for i in l:
for s in play3(i):
yield s
except TypeError:
yield l def printqueens(l):
"""
打印输出结果
"""
l = play3(l)
l = list(l)
n = len(l)
for i in range(n):
for j in range(n):
if j != l[i]:
print('.', end=' ')
else:
print('q', end=' ')
print(' ') if __name__ == '__main__':
l = list(queens())
print(l)
n = len(l)
print('有 {0} 种放置方法:'.format(n))
for i in range(n):
print('--------------------')
printqueens(l[i])
print('--------------------')

【Python】生成器、回溯和八皇后问题的更多相关文章

  1. LeetCode 31:递归、回溯、八皇后、全排列一篇文章全讲清楚

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天我们讲的是LeetCode的31题,这是一道非常经典的问题,经常会在面试当中遇到.在今天的文章当中除了关于题目的分析和解答之外,我们还会 ...

  2. ACM:回溯,八皇后问题,素数环

    (一)八皇后问题 (1)回溯 #include <iostream> #include <string> #define MAXN 100 using namespace st ...

  3. 八皇后,回溯与递归(Python实现)

    八皇后问题是十九世纪著名的数学家高斯1850年提出 .以下为python语句的八皇后代码,摘自<Python基础教程>,代码相对于其他语言,来得短小且一次性可以打印出92种结果.同时可以扩 ...

  4. Python学习二(生成器和八皇后算法)

    看书看到迭代器和生成器了,一般的使用是没什么问题的,不过很多时候并不能用的很习惯 书中例举了经典的八皇后问题,作为一个程序员怎么能够放过做题的机会呢,于是乎先自己来一遍,于是有了下面这个ugly的代码 ...

  5. python基础教程总结8——特殊方法,属性,迭代器,生成器,八皇后问题

    1. 重写一般方法和特殊的构造方法 1.1 如果一个方法在B类的一个实例中被调用(或一个属性被访问),但在B类中没有找到该方法,那么会去它的超类A里面找. class A: ... def hello ...

  6. Python 八皇后问题

    八皇后问题描述:在一个8✖️8的棋盘上,任意摆放8个棋子,要求任意两个棋子不能在同一行,同一列,同一斜线上,问有多少种解法. 规则分析: 任意两个棋子不能在同一行比较好办,设置一个队列,队列里的每个元 ...

  7. Python解决八皇后问题

    最近看Python看得都不用tab键了,哈哈.今天看了一个经典问题--八皇后问题,说实话,以前学C.C++的时候有这个问题,但是当时不爱学,没搞会,后来算法课上又碰到,只是学会了思想,应该是学回溯法的 ...

  8. 【算法导论】八皇后问题的算法实现(C、MATLAB、Python版)

    八皇后问题是一道经典的回溯问题.问题描述如下:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8*8个方格),使它们谁也不能被吃掉?         看到这个问题,最容易想 ...

  9. 【算法】八皇后问题 Python实现

    [八皇后问题] 问题: 国际象棋棋盘是8 * 8的方格,每个方格里放一个棋子.皇后这种棋子可以攻击同一行或者同一列或者斜线(左上左下右上右下四个方向)上的棋子.在一个棋盘上如果要放八个皇后,使得她们互 ...

随机推荐

  1. 使用Gradle编译release apk报错:Please correct the above warnings first

    在开发SDK的过程中,遇到了一个研发,使用了自己的SDK之后遇到了各种问题,于是我们自己帮忙接入. 所有代码都接入完成之后,准备export出一个release包,但是此时却报错: 此时出现了很多的w ...

  2. [MFC美化] SkinSharp使用详解2-SkinH.h函数介绍

    SkinSharp功能强大,该皮肤库支持完全多种颜色改变等. 下面是静态链接库时的SkinH.h头文件: /*在Stdafx.h文件中加入如下语句 #include "SkinH.h&quo ...

  3. 最近一段OI学习计划

    1.在寒假的时间里尽量吧图论和DP的基础先学一下: 图论:数,二叉树,DFS.BFS遍历,然后最短路径(Floyd.dijkstra.SPFA),然后再最小生成树吧,如果还有时间的话(kruskal( ...

  4. Importing Product Images on Magento

    Multiple product images of each type can be imported into Magento, and associated with a specific pr ...

  5. oracle中关于Oracle Database 11g Express Edition 打不开的问题

    报的错误是http://127.0.0.1:...什么的找不到该文件 如果是127.0.0.1没问题,而且oracle中5个服务没问题,而且oracle可以启动.. 最后的问题是8080端口冲突,如果 ...

  6. dev Gridcontrol根据其cell里面的值显示不同颜色

    要改变cell值得颜色 需要用到cellTemplate和convert <DataTemplate x:Key="PercentageCellColorTemplate"& ...

  7. CentOS 7将Python 2.X.X升级到Python 3.X.X

    # cd /usr/local/src/ # ls Python-.tgz # .tgz # ls Python- Python-.tgz # cd Python-/ # yum install gc ...

  8. 用yum源安装Nginx

    1.在/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo: cd /etc/yum.repos.d/ vi nginx.repo 填写如下内容: [nginx] name= ...

  9. 《Intel汇编第5版》 汇编逆转字符串

    一.逆转字符串 逆转一个字符串可以利用栈这个数据结果,顺次读取所有元素压栈,再出栈所有元素即可逆序 二.push和pop指令 三.pushfd和popfd 四.pushad和popad 五.代码以及结 ...

  10. F9 excel上传

    1 在前台制定文件上传按钮 <div id="dataImport" class="mini-webuploader" pickerText=" ...