python解决八皇后问题的方法
2024-08-30 05:45:18
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/9/11 15:40
# @Author : Lijinjin
# @Site :
# @File : testQueens.py
# @Software: PyCharm def conflict(state,nextX): '''
:param state: state[] = {1,3,0,2}则表示皇后的位置分别在第一行第一个,第二行第三个,第三行第0个,第四行第2个
state[i]表示列位置,已存在皇后的位置,后来的皇后与之比较
:param nextX:nextX表示皇后的水平位置
:return:是否冲突
'''
nextY = len(state) # 代表垂直位置
for i in range(nextY):
if abs(state[i]-nextX)in (0,nextY-i):
return True
return False def queens(num=4,state=()):
for pos in range(num):
if not conflict(state,pos):
if len(state)==num-1:
yield (pos,)
else:
'''
1.这里循环是为了将找到的位置通过下面的代码,加入到结果中。每一层执行都会加入新的元素
2.result就是为了拿到以前已有的位置,然后再加入函数最新计算出的pos(计算出之后并未立即加入的结果元组中)
3.在没有将皇后摆满的情况下,一旦发现皇后在当前行没用位置摆放,当层的函数即向上层返回,改变上层的pos值
'''
for result in queens(num,state+(pos,)): # 这里循环是为了将找到的位置通过下面的代码,加入到结果中。每一层执行都会加入新的
yield (pos,)+result print(list(queens(4)))
print(len(list(queens(4)))) 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(4))))
最新文章
- Devexpress Ribbon Add Logo
- WebStorm调试node.js
- Websocket 协议解析
- 使用 SVG 实现一个漂亮的页面预加载效果
- 动软MySQL存储过程模板
- python 条件判断和循环
- vs2012 .netFramwork2.0发布到xp
- iOS 网络处理注意点
- HW7.6
- Codevs 4600 [NOI2015]程序自动分析
- 比较全面的gdb调试命令 (转载)
- form 和 ngModel
- JavaScript 、ECMAScript、commonJS 发展历史 与标准化发展
- sqlalchemy-数据库操作
- 小草手把手教你 LabVIEW 串口仪器控制——VISA 串口配置
- FSM之SMC使用总结
- VS2008中开发手持终端程序(PDA软件)总结
- Maven常用命令:
- Elastic Search 语法总结
- Consecutive Subsequence CodeForces - 977F (map优化DP)·