Python基于生成器迭代实现的八皇后问题示例
本文实例讲述了Python基于生成器迭代实现的八皇后问题。分享给大家供大家参考,具体如下:
问题:有一个棋盘和8个要放到上面的皇后,唯一的要求是皇后之间不能形成威胁。也就是说,必须把他们防止成每个皇后都不能吃掉其他皇后的状态。
#-*-coding:utf-8-*- #python2.7.13 __metaclass__=type defconfict(state,nextX): nextY=len(state) foriinrange(nextY): ifabs(state[i]-nextX)in(0,nextY-i): returnTrue returnFalse defqueens(num=8,state=()): forposinrange(num): ifnotconfict(state,pos): iflen(state)==num-1: yield(pos,) else: forresultinqueens(num,state+(pos,)): yield(pos,)+result printlist(queens())#打印输出
运行结果:
[(0,4,7,5,2,6,1,3),(0,5,7,2,6,3,1,4),(0,6,3,5,7,1,4,2),(0,6,4,7,1,3,5,2),(1,3,5,7,2,0,6,4),(1,4,6,0,2,7,5,3),(1,4,6,3,0,7,5,2),(1,5,0,6,3,7,2,4),(1,5,7,2,0,3,6,4),(1,6,2,5,7,4,0,3),(1,6,4,7,0,3,5,2),(1,7,5,0,2,4,6,3),(2,0,6,4,7,1,3,5),(2,4,1,7,0,6,3,5),(2,4,1,7,5,3,6,0),(2,4,6,0,3,1,7,5),(2,4,7,3,0,6,1,5),(2,5,1,4,7,0,6,3),(2,5,1,6,0,3,7,4),(2,5,1,6,4,0,7,3),(2,5,3,0,7,4,6,1),(2,5,3,1,7,4,6,0),(2,5,7,0,3,6,4,1),(2,5,7,0,4,6,1,3),(2,5,7,1,3,0,6,4),(2,6,1,7,4,0,3,5),(2,6,1,7,5,3,0,4),(2,7,3,6,0,5,1,4),(3,0,4,7,1,6,2,5),(3,0,4,7,5,2,6,1),(3,1,4,7,5,0,2,6),(3,1,6,2,5,7,0,4),(3,1,6,2,5,7,4,0),(3,1,6,4,0,7,5,2),(3,1,7,4,6,0,2,5),(3,1,7,5,0,2,4,6),(3,5,0,4,1,7,2,6),(3,5,7,1,6,0,2,4),(3,5,7,2,0,6,4,1),(3,6,0,7,4,1,5,2),(3,6,2,7,1,4,0,5),(3,6,4,1,5,0,2,7),(3,6,4,2,0,5,7,1),(3,7,0,2,5,1,6,4),(3,7,0,4,6,1,5,2),(3,7,4,2,0,6,1,5),(4,0,3,5,7,1,6,2),(4,0,7,3,1,6,2,5),(4,0,7,5,2,6,1,3),(4,1,3,5,7,2,0,6),(4,1,3,6,2,7,5,0),(4,1,5,0,6,3,7,2),(4,1,7,0,3,6,2,5),(4,2,0,5,7,1,3,6),(4,2,0,6,1,7,5,3),(4,2,7,3,6,0,5,1),(4,6,0,2,7,5,3,1),(4,6,0,3,1,7,5,2),(4,6,1,3,7,0,2,5),(4,6,1,5,2,0,3,7),(4,6,1,5,2,0,7,3),(4,6,3,0,2,7,5,1),(4,7,3,0,2,5,1,6),(4,7,3,0,6,1,5,2),(5,0,4,1,7,2,6,3),(5,1,6,0,2,4,7,3),(5,1,6,0,3,7,4,2),(5,2,0,6,4,7,1,3),(5,2,0,7,3,1,6,4),(5,2,0,7,4,1,3,6),(5,2,4,6,0,3,1,7),(5,2,4,7,0,3,1,6),(5,2,6,1,3,7,0,4),(5,2,6,1,7,4,0,3),(5,2,6,3,0,7,1,4),(5,3,0,4,7,1,6,2),(5,3,1,7,4,6,0,2),(5,3,6,0,2,4,1,7),(5,3,6,0,7,1,4,2),(5,7,1,3,0,6,4,2),(6,0,2,7,5,3,1,4),(6,1,3,0,7,4,2,5),(6,1,5,2,0,3,7,4),(6,2,0,5,7,4,1,3),(6,2,7,1,4,0,5,3),(6,3,1,4,7,0,2,5),(6,3,1,7,5,0,2,4),(6,4,2,0,5,7,1,3),(7,1,3,0,6,4,2,5),(7,1,4,2,0,6,3,5),(7,2,0,5,1,4,6,3),(7,3,0,2,5,1,6,4)]
输出列表长度:
printlen(list(queens()))#输出:92
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。