python 解决八皇后问题
2013-07-06 20:06
253 查看
由于八皇后问题很著名不再详述,直接贴代码:
输出结果:
QXXXXXXX
XXXXXXQX
XXXQXXXX
XQXXXXXX
XXQXXXXX
XQXXXXXX
XXXXQXXX
XXXXXQXX
import random #判断是否冲突的函数 def conflict(state,nextX): nextY=len(state) for i in range(nextY): if abs(state[i]-nextX) in (0,nextY-i): #abs(state[i]-nextX)等于0表示在同一行,abs(state[i]-nextX)等于nextY-i表示在同一列 return True return False def queens(num,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 def prettyprint(solution): #输出皇后问题的矩阵 ,Q表示皇后的位置 def line(pos,length=len(solution)): return 'X'*(pos)+'Q'+'X'*(length-1-pos) for pos in solution: print line(pos) if __name__=='__main__': prettyprint(random.choice(list(queens(8)))) #由于queens生成多种解决方案,random模块的choice方法会从一个有序类型中随机选一个
输出结果:
QXXXXXXX
XXXXXXQX
XXXQXXXX
XQXXXXXX
XXQXXXXX
XQXXXXXX
XXXXQXXX
XXXXXQXX
相关文章推荐
- 利用python的生成器解决八皇后问题
- 八皇后问题——用Python解决
- Python解决八皇后问题示例
- python解决八皇后问题
- python idle 清屏问题的解决
- python解决urllib2乱码问题
- 解决python27 matplotlib 中文不显示问题
- Python Selenium 启动新版本Firefox失败问题解决方案
- Python3.5 TypeError: cannot use a string pattern on a bytes-like object问题解决
- 运用全排列的方法解决八皇后问题
- PYTHOn 各种乱码问题解决
- 解决乌班图(Ubuntu)系统已经装好了python的各种包,Geany开发环境检测不到的问题
- ubuntu下anaconda解决python2与python3共存问题
- Python解决文件编码问题
- 解决Python中pip指令下载Package以及pip更新中的问题
- 【python3.5问题解决】安装Django
- Python安装Imaging报错:The _imaging C module is not installed问题解决方法
- 手把手教你:解决python UnicodeDecodeError: 'gb2312' codec can't decode问题
- python解决pandas处理缺失值为空字符串的问题
- python显示'\u897f类字符问题的解决方法