#!/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))))

最新文章

  1. Devexpress Ribbon Add Logo
  2. WebStorm调试node.js
  3. Websocket 协议解析
  4. 使用 SVG 实现一个漂亮的页面预加载效果
  5. 动软MySQL存储过程模板
  6. python 条件判断和循环
  7. vs2012 .netFramwork2.0发布到xp
  8. iOS 网络处理注意点
  9. HW7.6
  10. Codevs 4600 [NOI2015]程序自动分析
  11. 比较全面的gdb调试命令 (转载)
  12. form 和 ngModel
  13. JavaScript 、ECMAScript、commonJS 发展历史 与标准化发展
  14. sqlalchemy-数据库操作
  15. 小草手把手教你 LabVIEW 串口仪器控制——VISA 串口配置
  16. FSM之SMC使用总结
  17. VS2008中开发手持终端程序(PDA软件)总结
  18. Maven常用命令:
  19. Elastic Search 语法总结
  20. Consecutive Subsequence CodeForces - 977F (map优化DP)·

热门文章

  1. shell top
  2. jquery和Ajax(异步js和XML)的应用
  3. js穿梭框;将两个table中的数据选中移动
  4. [转帖]Oracle 起诉 Google 事件
  5. Codeforces 1097F. Alex and a TV Show
  6. MyBatis Java不同方式加载文件时的路径格式问题、Mybatis中加载.properties文件
  7. oracle_多表查询02
  8. 命令行发送SMTP协议邮件(163邮箱)
  9. DSN 建立达梦7(DM)连接
  10. JS 实现继承的方法 ES6 and ES5