Python八皇后问题
来源:互联网 发布:沈阳军区朱日和 知乎 编辑:程序博客网 时间:2024/05/30 02:25
### 八皇后问题def conflict(state, nextX): """ 检查是否下一个皇后位置与之前的皇后是否有冲突 有返回True 无返回False :param state:之前几个皇后的X坐标 :param nextX: 下一个皇后的X坐标 :return: """ nextY = len(state) for i in range(nextY): # 如果下一个皇后的位置和正在考虑的前一个皇后的水平距离为0(列相同) # 或者等于垂直距离(对角线判断,nextY-i就是垂直距离) if abs(state[i] - nextX) in (0, nextY - i): return True return Falsedef queens(num=8, state=()): """ 解法生成器 num是几排几列,默认是8,因为八皇后嘛 :param state: 之前皇后的位置 :return: 皇后X坐标 """ for pos in range(num): if not conflict(state, pos): #无冲突 if len(state) == num - 1: #当len(state)==7 时,说明资讯要再生成一个位置就好了。 yield (pos,) else: #使用for是因为,queens产生的解法不止一种,需要甄别,比如,第一排的摆法就有4种 for result in queens(num, state + (pos,)): #递归,第一次的state是空的,然后确定了第一排的皇后 #第二次,state中多了第一排皇后的位置,然后再把现在的state传下去,为第二排皇后的位置做参数 yield (pos,) + resultdef prettyprint(solution): """ 输出棋盘摆法 :param solution: :return: """ 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))))
阅读全文
0 0
- python-八皇后问题
- Python八皇后问题
- python 八皇后问题
- python-八皇后问题
- 八皇后问题Python解法
- Python版八皇后问题
- Python之八皇后问题
- 八皇后问题python实现
- Python实现八皇后问题
- 八皇后问题 Python 版
- 八皇后问题 - Python - from Python基础教程
- Python版的八皇后问题
- Python学习笔记—八皇后问题
- 使用Python生成器解决八皇后问题
- Python学习笔记之八皇后问题
- 八皇后问题的python代码
- 八皇后问题(Python实现)
- python生成器实战,八皇后问题
- 用CSS画实心三角形和空心三角形
- 344. Reverse String
- java梯形九九乘法表
- springmvc笔记-4-标签库
- C++:fstream流的eof()函数多读一行的问题
- Python八皇后问题
- JavaScript知识汇总
- 有限扩散集团凝聚模型(DLCA)第三讲:流动水流中的凝聚模拟(1)
- PostQuitMessage(0);
- 装饰器
- Java之旅No.4:Java的继承(1)
- 2017 Multi-University Training Contest 3 && HDOJ 6058 Kanade's sum 【链表模拟】
- 倒排索引和正排索引
- Error:Execution failed for task ':app:greendao'. Error:Execution failed for task ':app:greendao'. >