python解决经典算法八皇后问题,在棋盘上放置8个皇后,而不让她们之间互相攻击。

import sys, itertools

from sets import Set

NUM_QUEENS = 8

MAX = NUM_QUEENS * NUM_QUEENS

# Each position (i.e. square) on the chess board is assigned a number

# (0..63). non_intersecting_table maps each position A to a set

# containing all the positions that are *not* attacked by the position

# A.

intersecting_table = {}

non_intersecting_table = {}

# Utility functions for drawing chess board

def display(board):

"Draw an ascii board showing positions of queens"

assert len(board)==MAX

it = iter(board)

for row in xrange(NUM_QUEENS):

for col in xrange(NUM_QUEENS):

print it.next(),

print '\n'

def make_board(l):

"Construct a board (list of 64 items)"

board = [x in l and '*' or '_' for x in range(MAX)]

return board

# Construct the non-intersecting table

for pos in range(MAX):

intersecting_table[pos] = []

for row in range(NUM_QUEENS):

covered = range(row * NUM_QUEENS, (row+1) * NUM_QUEENS)

for pos in covered:

intersecting_table[pos] += covered

for col in range(NUM_QUEENS):

covered = [col + zerorow for zerorow in range(0, MAX, NUM_QUEENS)]

for pos in covered:

intersecting_table[pos] += covered

for diag in range(NUM_QUEENS):

l_dist = diag + 1

r_dist = NUM_QUEENS - diag

covered = [diag + (NUM_QUEENS-1) * x for x in range(l_dist)]

for pos in covered:

intersecting_table[pos] += covered

covered = [diag + (NUM_QUEENS+1) * x for x in range(r_dist)]

for pos in covered:

intersecting_table[pos] += covered

for diag in range(MAX - NUM_QUEENS, MAX):

l_dist = (diag % NUM_QUEENS) + 1

r_dist = NUM_QUEENS - l_dist + 1

covered = [diag - (NUM_QUEENS + 1) * x for x in range(l_dist)]

for pos in covered:

intersecting_table[pos] += covered

covered = [diag - (NUM_QUEENS - 1) * x for x in range(r_dist)]

for pos in covered:

intersecting_table[pos] += covered

universal_set = Set(range(MAX))

for k in intersecting_table:

non_intersecting_table[k] = universal_set - Set(intersecting_table[k])

# Once the non_intersecting_table is ready, the 8 queens problem is

# solved completely by the following method. Start by placing the

# first queen in position 0. Every time we place a queen, we compute

# the current non-intersecting positions by computing union of

# non-intersecting positions of all queens currently on the

# board. This allows us to place the next queen.

def get_positions(remaining=None, depth=0):

m = depth * NUM_QUEENS + NUM_QUEENS

if remaining is not None:

rowzone = [x for x in remaining if x < m]

else:

rowzone = [x for x in range(NUM_QUEENS)]

for x in rowzone:

if depth==NUM_QUEENS-1:

yield (x,)

else:

if remaining is None:

n = non_intersecting_table[x]

else:

n = remaining & non_intersecting_table[x]

for p in get_positions(n, depth + 1):

yield (x,) + p

return

rl = [x for x in get_positions()]

for i,p in enumerate(rl):

print '=' * NUM_QUEENS * 2, "#%s" % (i+1)

display(make_board(p))

print '%s solutions found for %s queens' % (i+1, NUM_QUEENS)

python遗传算法八皇后_python解决八皇后算法详解相关推荐

  1. python中字符串乘法_python leetcode 字符串相乘实例详解

    给定两个以字符串形式表示的非负整数 num1 和  num2 ,返回  num1 和  num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2", ...

  2. [转载] python支持complex吗_Python 内置函数complex详解

    参考链接: Python complex() 英文文档: class complex([real[, imag]]) Return a complex number with the value re ...

  3. python怎样实现封装_Python底层封装实现方法详解

    Python底层封装实现方法详解 这篇文章主要介绍了Python底层封装实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 事实上,pyth ...

  4. python实现括号匹配算法_Python实现括号匹配方法详解

    这篇文章主要简介了python实现括号匹配方法详解,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下 1.用一个栈[python中可以用List]就可 ...

  5. python多进程应用场景_python使用多进程的实例详解

    python多线程适合IO密集型场景,而在CPU密集型场景,并不能充分利用多核CPU,而协程本质基于线程,同样不能充分发挥多核的优势. 针对计算密集型场景需要使用多进程,python的multipro ...

  6. python语言格式化输出_Python format()格式化输出方法详解

    原标题:Python format()格式化输出方法详解 format() 方法的语法格式如下: str.format(args) 此方法中,str 用于指定字符串的显示样式:args 用于指定要进行 ...

  7. python的socket模块_Python socket模块方法实现详解

    这篇文章主要介绍了python socket模块方法实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 socket ssh (不带防止粘包的方 ...

  8. python协程库_python中协程的详解(附示例)

    本篇文章给大家带来的内容是关于python中协程的详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 协程,又称微线程,纤程.英文名Coroutine 协程看上去也是子程序 ...

  9. python语法错误概述_Python 错误和异常代码详解

    程序中的错误一般被称为 Bug,无可否认,这几乎总是程序员的错... 程序员的一生,始终伴随着一件事 - 调试(错误检测.异常处理).反反复复,最可怕的是:不仅自己的要改,别人的也要改...一万头草泥 ...

  10. python的底层实现_Python底层封装实现方法详解

    这篇文章主要介绍了Python底层封装实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 事实上,python封装特性的实现纯属" ...

最新文章

  1. 告诉你,Spring Boot 真是个牛逼货!
  2. FPGA篇(五)Capture导出FPGA引脚分配和端口定义
  3. PHP底层运行原理初探
  4. AS3容易被忽略的一些特性
  5. 乘风破浪:LeetCode真题_010_Regular Expression Matching
  6. 数据结构 - 二叉树
  7. Spring:自动接线或不自动接线
  8. 进程间通信————信号
  9. 回顾经典,Netflix的推荐系统架构
  10. 谷歌 AI 的2019:日均2篇论文,纵横16大方向,一文汇集重要开源算法
  11. Debian安装autoconf
  12. oracle rman异地备份,rman异地备份与恢复测试
  13. linux压力测试脚本,一种基于shell脚本的CPU压力测试方法与流程
  14. RS485芯片介绍及典型应用电路
  15. 动手学深度学习讲义批量下载
  16. 微信下载多媒体文件 java_java微信开发之上传下载多媒体文件_php实例
  17. 小程序之视频卡顿问题
  18. android n进入分屏代码分析_Android分屏多窗口的实践代码
  19. 微信加密某一个人私聊?微信私密聊天
  20. 本地mysql拒绝jdbc连接失败_jdbc连接MySQL数据库的诡异异常 java.net.ConnectException: 拒绝连接...

热门文章

  1. ​神经结构搜索中的遗传算法
  2. 开源项目zheng学习
  3. matlab编程求卫星轨道长度,GPS卫星轨道计算及其MATLAB仿真.pdf
  4. 关于pidgin群显示NULL 解决办法
  5. C++实现身份证校验和归属地查询
  6. 【Maven】Idea搭建多Module项目修修补补
  7. 《那些年啊,那些事——一个程序员的奋斗史》——113
  8. 章鱼网络应用链|为什么 DEIP 会选择章鱼网络?
  9. Linux history命令
  10. python少儿图形编程_少儿Python编程_第十六讲:图形界面开发