八皇后问题:

  把N个皇后,放在N*N的棋盘上面,从第一行往下放,每个皇后占一行,同时,每个皇后不能处在同一列,对角线上,有多少种放置方法。

思路:

  典型的回溯问题:

    1.当要放置最后一个皇后时候,默认前N-1个皇后已经全部放置好了,那么验证在第N行上的每个位置是否可行,即是否与之前的皇后在同一列或者对角线即可;

    2.如果放置的不是最后一个皇后,则回溯。回溯至刚开始放第一个元素时候,然后不断的返回上一层。每一层都认为下一层传递给自己的是正确的信息

 def isconflict(state, nx):
"""
验证下一个要放置的皇后是否与之前的皇后冲突
"""
ny = len(state)
for i in range(ny):
if abs(state[i]-nx) in (, ny-i):
return True
return False def queens(num=, state=[]):
"""
主处理函数
"""
for p in range(num):
if not isconflict(state, p):
if len(state) == num-:
yield p
else:
for result in queens(num, state+[p]):
yield [result, p] def play3(l):
"""
把返回的结果列表中的子列表裂解开
"""
try:
try: l+''
except TypeError: pass
else: raise TypeError
for i in l:
for s in play3(i):
yield s
except TypeError:
yield l def printqueens(l):
"""
打印输出结果
"""
l = play3(l)
l = list(l)
n = len(l)
for i in range(n):
for j in range(n):
if j != l[i]:
print('.', end=' ')
else:
print('q', end=' ')
print(' ') if __name__ == '__main__':
l = list(queens())
print(l)
n = len(l)
print('有 {0} 种放置方法:'.format(n))
for i in range(n):
print('--------------------')
printqueens(l[i])
print('--------------------')

最新文章

  1. 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
  2. 罗马数字转整数Leetcode13
  3. java验证码组件kaptcha使用方法
  4. gtk+2.24.0-glib-2.28.1-staticLib-mingw32-x86-2016-08-10.7z
  5. 四则运算GUI版本
  6. Android沉浸式(侵入式)标题栏(状态栏)Status(二)
  7. 实验一DOS报告
  8. UITabBarController自定义一
  9. JavaSE学习总结第22天_IO流4
  10. EasyX
  11. CIA402状态转换图
  12. 如何把PDF文件拆分为多个文件
  13. C++中的stack类、QT中的QStack类
  14. 008-我的博友不锈钢钥匙扣上的随身金属外壳可启动U盘-20190413
  15. Codeforces 873E Awards For Contestants ST表
  16. jQuery-动画点击淡化消失
  17. flash builder 4.7 打开闪退解决办法
  18. 伯克利开源 Confluo,吞吐量是 Kafka 的 4 到 10 倍
  19. Merge:解析on子句和when not match子句的陷阱
  20. cogs1799 [国家集训队2012]tree(伍一鸣)

热门文章

  1. 批处理+组策略 实现规定时间段无法开机and定时关机
  2. kafka服务安装-SuSE Linux Enterprise Server 11 SP3
  3. Heap Sort
  4. 免备案速度快最新优惠码,vps评测digitalocean对比vultr和linode
  5. canvas实现画板功能(渐变、动画、阴影...)
  6. centos7下引导win7
  7. 数据库索引的实现原理(笔记)详细http://www.linezing.com/blog/?p=798#nav-1
  8. USACO 3.2 Contact
  9. IntelliJ IDEA “Finds duplicated code”提示如何关闭
  10. 【1】JavaScript编程全解笔记(一)