八皇后问题 - Python - from Python基础教程
2014-05-29 17:00
483 查看
八皇后问题 - Python 描述 -生成器方法
//state[] 皇后相应的位置
//state[0]==3 表示第一行的皇后在第四列
//检测冲突
def conflict(state,nextX):
nextY = len(state)
for i in range(nextY):
if abs(state[i] - nextX) in (0,nextY - i): //上一个皇后和下一个皇后在同一列或者同一对角线上
return True
return False
//递归生成位置
def queens(num=8,state=()):
for pos in range(num):
if not conflict(state,pos):
if len(state) == num-1:
yield (pos,)
else:
for result in queens(num,state+(pos,)):
yield (pos,)+result
//八皇后解决方案数量
len(list(queens(8)))
//打印结果
def prettyprint(solution):
def line(pos,length=len(solution)):
return '.'*(pos) + 'X' +'.'*(length-pos-1)
for pos in solution:
print(line(pos))
import random
prettyprint(random.choice(list(queens(8))))
//state[] 皇后相应的位置
//state[0]==3 表示第一行的皇后在第四列
//检测冲突
def conflict(state,nextX):
nextY = len(state)
for i in range(nextY):
if abs(state[i] - nextX) in (0,nextY - i): //上一个皇后和下一个皇后在同一列或者同一对角线上
return True
return False
//递归生成位置
def queens(num=8,state=()):
for pos in range(num):
if not conflict(state,pos):
if len(state) == num-1:
yield (pos,)
else:
for result in queens(num,state+(pos,)):
yield (pos,)+result
//八皇后解决方案数量
len(list(queens(8)))
//打印结果
def prettyprint(solution):
def line(pos,length=len(solution)):
return '.'*(pos) + 'X' +'.'*(length-pos-1)
for pos in solution:
print(line(pos))
import random
prettyprint(random.choice(list(queens(8))))
相关文章推荐
- python基础教程总结8——特殊方法,属性,迭代器,生成器,八皇后问题
- Python基础教程----迭代器和生成器,递归,八皇后(2)
- Python学习入门基础教程(learning Python)--2.3.5Python返回多个值问题
- python基础教程学习笔记 — 字符编码问题
- python基础教程修订版2 第四章问题求问
- python基础系列教程——Python中的编码问题,中文乱码问题
- Ubuntu 安装 PostgreSQL 和 python-psycopg2基础教程(以及错误解决)
- Python - 基础教程学习(第一章 & 第二章)
- Ogre基础教程遇到的问题
- python基础教程-第1章节 基础知识
- python基础教程项目1:及时标记
- 推荐网上编程教程,适应零基础:javascript、python、ruby 、java 、andriod
- 【C010】Python - 基础教程学习(一)
- 关于OGRE基础教程6中CEGUI的layout文件can not locate的问题
- xml-RPC Python基础教程
- Python基础之---运算符与用法及编码问题
- 【C011】Python - 基础教程学习(二)
- Objective-C基础教程学习遇到的小问题(不断添加)
- Python2.5/2.6实用教程:基础篇
- 八皇后问题的进化(4)-python写的八皇后