17. Python脚本学习笔记十七Python的八皇后问题
来源:互联网 发布:vue js 折叠面板例子 编辑:程序博客网 时间:2024/06/05 22:18
17. Python脚本学习笔记十七Python的八皇后问题
本篇名言:“做官是一张纸,做人是一辈子;金钱是一张纸,健康是一辈子;夫妻是一张纸,感情是一辈子;荣誉是一张纸,朋友是一辈子!”
我们接下去看下如何使用生成器来解决实际问题,这里以八皇后问题为例。八皇后问题在数据结构笔记中有一节描述,采用C语言来解决该会提,我们来Python解决是否会更高效。
八皇后问题在此不再啰嗦了,网络上有一大堆,可以参考
yield关键字用来定义生成器(Generator),可以当return使用,它从函数里返回一个值,不同之处是用yield返回之后,可以让函数从上回yield返回的地点继续执行。直到yield语句再返回一个新的值。
1. 碰撞检测
如下:
defconflict(state,nextX):
nextY=len(state)
for iinrange(nextY):
if abs(state[i]-nextX)in(0,nextY-i):
returnTrue
returnFalse
nextX,nextY表示下一个皇后的横坐标和纵坐标。
State是存放前面皇后的位置信息的元组。
完整代码如下:
defconflict(state, nextX):
nextY = len(state)
for iinrange(nextY):
if abs(state[i]-nextX)in(0, nextY-i):
returnTrue
returnFalse
defqueens(num=8,state=()):
for posin range(num):
ifnotconflict(state, pos):
if len(state) == num-1:
yield (pos,)
else:
for resultin queens(num,state + (pos,)):
yield (pos,)+result
printlist(queens(8,state=()))
printlen(list(queens(8,state=())))
短短十几行代码就实现了
其中包含了回溯和迭代,需要慢慢品味。
- 17. Python脚本学习笔记十七Python的八皇后问题
- Python学习笔记—八皇后问题
- Python学习笔记之八皇后问题
- Python学习笔记之八皇后问题
- python-八皇后问题
- Python八皇后问题
- python 八皇后问题
- python-八皇后问题
- Python版的八皇后问题
- 八皇后问题的python代码
- “八皇后问题”的 Python 语言解法
- 八皇后问题Python解法
- Python版八皇后问题
- Python之八皇后问题
- 八皇后问题python实现
- Python实现八皇后问题
- 八皇后问题 Python 版
- python数据结构学习笔记-2016-11-12-03-八皇后问题
- 15. Python脚本学习笔记十五特殊方法、属性和迭代器
- 通过itchat进行给好友发送消息
- 数据结构实验之二叉树八:(中序后序)求二叉树的深度
- 16. Python脚本学习笔记十六生成器
- redis之NoSQL入门和概述及应用
- 17. Python脚本学习笔记十七Python的八皇后问题
- 被占用文件操作三法
- redis之NoSQL数据模型简介与分类
- spring InitializingBean init-method postConstruct 执行顺序
- JSTL取得字符串长度及截取字符串(FN函数)
- 18. Python脚本学习笔记十八模块
- 链接
- Hexo 0 基础全套教程
- 机器学习 Python scikit-learn 中文文档与指南