码迷,mamicode.com
首页 > 编程语言 > 详细

python解决八皇后问题

时间:2016-04-29 23:29:45      阅读:459      评论:0      收藏:0      [点我收藏+]

标签:

经典回溯算法:八皇后问题

算法要求:

在国际象棋棋盘上(8*8)放置八个皇后,使得任意两个皇后之间不能在同一行,同一列,也不能位于同于对角线上。

国际象棋的棋盘如下图所示:

技术分享

问共有多少种不同的方法,并且指出各种不同的放法。

# -*- coding:utf-8 -*-
__author__ = "tyomcat"

print("******八皇后问题的解决方法******")
def next_col(current, n=8):  
    length = len(current)  
    if length == n:
        return
    dangerous = current + [item for l in [(val + length - i, val - length + i)  for i, val in enumerate(current)]  for item in l if item >= 0 and item <= n]  
    for i in range(n):
            if i not in dangerous:  
                yield i  

def queens(n=8, columns=[]):  
    if len(columns) == n:  
        yield columns  
    for i in next_col(columns, n):  
        appended = columns + [i]  
        for c in queens(n, appended):  
            yield c  
 
def prettyprint(solution):  
   def line(pos,lengh=len(solution)):  
       return .*(pos)+X+.*(lengh-pos-1)  
   for pos in solution:  
        print(line(pos))  
 
if __name__ == __main__:  
    i = 0  
    for solution in queens(8):  
    # print(i, solution)   
        i+=1  
        if i > 1: print (\n)
        print ( + str(i) + )
        prettyprint(solution)  

 

python解决八皇后问题

标签:

原文地址:http://www.cnblogs.com/tyomcat/p/5447752.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!