题目:

The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens attack each other.

Given an integer n, return all distinct solutions to the n-queens puzzle.

Each solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space respectively.

For example,
There exist two distinct solutions to the 4-queens puzzle:

[
[".Q..", // Solution 1
"...Q",
"Q...",
"..Q."], ["..Q.", // Solution 2
"Q...",
"...Q",
".Q.."]
]
 代码:
N皇后问题,经典问题,想想应该用递归来做,逻辑想想也不复杂,但就是实现起来总觉得好困难!
最近在学习python的生成器yield,用生成器可以很优雅的实现这个问题:
生成器并不会一次返回所有结果,而是每次遇到yield关键字后返回相应结果,并保留函数当前的运行状态,等待下一次的调用。
yield类似于普通函数执行中的return,不同的是会记录当前函数运行状态和结果,下次接着该状态执行。代码参考Magnus Lie Hetland的《python基础教程》第二版:
#encoding:utf-8
import random
class Solution(object):
    #判断新增位置是否与之前位置冲突
    #state用元组(tupe)保存之前换后的位置,例如0-3行皇后的位置保存为(1,3,0)
    #nextX代表下一个皇后的水平位置,和state的所有元素比较
    #保证不在一条线上(X坐标相同)且不在一个对角线上(Y坐标位置的差不等于X坐标位置的差),代码中:X坐标位置的差 not in(0, nextY-i)  
    def conflict(self, state, nextX):
        nextY = len(state)
        for i in range(nextY):
            if abs(state[i]-nextX) in (0, nextY-i):
                return True
        return False
    
    #输入棋盘大小num和当前皇后位置状态state
    #用conflict判断下一行皇后的位置pos是否与state中的皇后位置冲突
    #冲突就放弃这个迭代分支
    #不冲突继续:分两种情况分支:
    # 1.下一行皇后是最后一行的皇后,不冲突的话就保存结果,无需迭代
    # 2.下一行皇后不是最后一行皇后,不冲突的话迭代调用该函数(queens()),迭代变量唯一区别是state的中增加当前皇后的位置,从而用来判断下一行皇后
    #注意生成器的使用:
    #生成器并不会一次返回所有结果,而是每次遇到yield关键字后返回相应结果,并保留函数当前的运行状态,等待下一次的调用。
    def queens(self, num=8,state=()):
        for pos in range(num):
            if not self.conflict(state, pos):
                if len(state) == num-1:
                    print ('state: ',state)
                    #print ('last pos: ',pos)
                    yield(pos, )
                else:
                    for result in self.queens(num, state + (pos,)):
                        #print ('state: ',state)
                        #print ('pos: ',pos)
                        #print ('result: ',result)
                        yield(pos, )+result

#该函数仅仅为了按题目要求格式化输出结果
    def prettyprint(self, one_way):
        result_list=[]
        def line(pos, length = len(one_way)):
            return ('.'*(pos) + 'Q' + '.'*(length-pos-1))
        for pos in one_way:
            result_list.append(line(pos))
        return result_list       
    
    def solveNQueens(self, n):
        """
        :type n: int
        :rtype: List[List[str]]
        """
        if(n==1): return [["Q"]]
        elif(n<=3): return []
        res_list = []
        solution = list(self.queens(n))
        #for i in solution:res_list.append(self.prettyprint(i))
        for i in solution:res_list.append(i)
        #print (res_list)
        #print (self.prettyprint(list(self.queens(n))[0]))
        return res_list
    
   
if __name__=="__main__":
    #print (list(queens(8)))
    #prettyprint(random.choice(list(queens(8))))
    a = Solution()
    print (a.solveNQueens(4))
   

运行结果:
    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAANsAAAAxCAIAAADcPkvzAAADUklEQVR4nO2c0bWEIAxEqYuCrIdqbMZifB/u20UgmgBqgnM/XQkRZgFxDm4FQBPu6QRamSc3zU8nccASvA/L01kYgqnIJXhmx/Pv7EBW2RK8c64ygXly/1SJ6FN5WnyeahN6JZYVmVY1T86HpUMCS/ByTUbCKyfWlNJ7yBT5+6N/WjG6sBsAohHl0/zUnfEPO63MU/V4tpL93EmR0hBRNtvjxgFunTiMkyqSWJYdNunux/zOOOReRU2KpAaelt7//5fJR7RvrfPknA8hSQ6SZJMqkliIlVo0HiQPFJmOnL3mL+qVpkfny5d+W63fctnfBRM3F2Iduant1ynFkS+epWhFXtUXVyqyIul5SpYpZHOBQ+g3m32rpi0aLf6Tubc0PBASuW3WllaUxGYVj8rkT4xZm02iyN0US0y+6ZuND2E3XOWbIHFUcU+TFKUfsx/iT2uiN39YxcndnxWClGB5h1zQz417gu3FMWVzsaxInia3kataEY3FV+yQC7GtyFX/V0Tt+anDvCLBYECRQBdQJNCFeUVqX6fBjSbEsvcnr4zeEWSHqy9O7WfiXVuEZUUW9BjZwXrayeR5pZrEOMllPDfaN7Iw8KGdTESuZ3yz4TOeG+003ZMiZTsZNyVizock2YznRqtcuJ3ZyYSppQlg4uYymhttCb5y2D2xk0ljJc8MRXIZyo1GyrHRTtZoZlsxawsYyI2WvVgJ3Wj07k+jmQ2ClGB5hxxutBGxrEi40UbEtiJX/V8RteenDvOKBIMBRQJdQJFAF7kif1sg+fpn8EVRJ+fYG1sp2gtsbMCiIstRTRxE1li8/b3YhEFOWn3+SZQ8veE+RZo5iIxZJ+Vba9s7NGOQY9ZOdTF9CthtijR0EJk4VD7yX+FHUmaQayxKXr1LkaYOIqsKdXiJiSmDnDgLxuV7FXnZsU/9DyJrrLo6ni2DnCiLYsTS9/sRFNn/IDIWtG+tsyK1GuSY6FWkkYPIeLUfqaToBWU9kR2DnKC40lnbzkFknOIHvjVyZVklSbUGOWlxTiutD+/+HPC49av77MaO+epWulmRFqxfVzjHpDHf2Uq/0NcosjBKf1MZ+ftYp8d7Yytd+RURgCeBIoEuoEigCygS6AKKBLqAIoEu/gAK6fKqaQ2ZnQAAAABJRU5ErkJggg==" alt="" />
当然,该算法不是解决八皇后问题的最优解,必定效率不高:
关于更多优秀解法,可以自行google。

aaarticlea/png;base64,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vtej3nd0vrhhheM4ufxo6d7SnCH+z6Vh3sT31bNEhiaXd/2Z6CuPb11hO3L7qlXdHdXVM7iGesY0PEtkzbOPLShs5U6ZW7fH3/ZSXTRfYte9MJpfkevq6R069F5o4ZVlG/NNVj2legvba9/74qqeru6qCfzrqXUAAADAcpLWe9gqnyTdc8P2p/yPYbv49unje7de25NzHCe39kH/wH5uNO/ddNd4aSKSuXPP31X67OSoz2ELfEhY+bPLgstrXWErfbJYbu29P67MeVH+ULDSm/DqGdPs57C1trBdfPvsS09tv8Gb2CP4wrmue+HwoLcJ1w+XP+rOnbvw413m+w6rz3eWUnT67hj3p5O5+Mazw+VP4a77DFu57+cPvOG/Y6380XPBcgkAAAAsc+lNOjL3+r4NPeHZ/AM6rtp69Hxw+NSDpXqW6+pZtcr7HIDu67dsWBNR2K7Pe4fulZHhT61u8SyRPygXjlxXT2WyRCd35Rb/KdQ1pqpgnT+65crAky4/yOm4+sFTtZ5LY4UtXsfVw1XTeMyderA86aU3W2T0hpVfOaeje9Wq/vsmAx+XHn5grmfD4PoVTvBD42rNEjm29crQgvyYr99jXm4JAAAALF/pzhI5d+GVp4Y3X7em8jls3hTtT52OmOpv7vWnt99YmgC+o7t/467nz82ZpaR8nD937vnhG715PXJdvddtPWAssNWzRL64d2vlWeS6erytC219zTGRBWvu3PO7NvvT3nd096/fVt9zabKwdXSv6l+/be/xN2LmXJy78MqBrf52OR3da6pfZNedO7XnxvLsKqV344Umd+zoXnPd1r0vnpsrzzJjfBp48iyRTw1v7F9VYwsAAACAZS2Daf0BAAAAAPWgsAEAAACAKAobAAAAAIiisAEAAACAKAobAAAAAIiisAEAAACAKAobAAAAAIiisAEAAACAKAobAAAAAIiisAEAAACAKAobAAAAAIiisAEAAACAKAobAAAAAIiisAEAAACAKAobAAAAAIiisAEAAACAKAobAAAAAIiisAEAAACAKAobAAAAAIiisAEAAACAKAobAAAAAIiisAEAAACAKAobAAAAAIiisAEAAACAKAobAAAAAIiisAEAAACAKAobAAAAAIiisAEAAACAKAobAAAAAIiisAEAAACAqFQK2zkAAAAAQNPSKmxpLBYAAAAA2geFDQAA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" alt="" />

第一道解决的LeetCode中Hard难度问题,基本上copy了书中的方法。不过通过逐句的分析学习,还是受益匪浅。

51. N-Queens的更多相关文章

  1. Spring Boot文档

    本文来自于springboot官方文档 地址:https://docs.spring.io/spring-boot/docs/current/reference/html/ Spring Boot参考 ...

  2. [Leetcode][Python]51: N-Queens

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 51: N-Queenshttps://oj.leetcode.com/pro ...

  3. CentOS7进行OpenStack(queens)最小化部署实验出现的问题与解决过程

    注:此文为<OpenStack(queens)最小化搭建记录——控制与计算共两个节点>的补充 1.chrony时间同步服务搭建的时候,出现计算节点无法与控制节点同步.(controller ...

  4. [LeetCode] 51. N-Queens N皇后问题

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  5. 记一次jdk升级引起的 Unsupported major.minor version 51.0

    之前jdk 一直是1.6,tomcat 是6.x 版本,, 现在引入的新的jar, 出现 Caused by: java.lang.UnsupportedClassVersionError: org/ ...

  6. 编写高质量代码:改善Java程序的151个建议(第3章:类、对象及方法___建议47~51)

    建议47:在equals中使用getClass进行类型判断 本节我们继续讨论覆写equals的问题,这次我们编写一个员工Employee类继承Person类,这很正常,员工也是人嘛,而且在JavaBe ...

  7. 解决Unsupported major.minor version 51.0错误

    解决Unsupported major.minor version 51.0错误使用jdk6运行项目时发生了Unsupported major.minor version 51.0错误.经过网上搜索发 ...

  8. 51. 顺时针打印矩阵[print matrix in clockwise direction]

    [本文链接] http://www.cnblogs.com/hellogiser/p/print-matrix-in-clockwise-direction.html [题目] 输入一个矩阵,按照从外 ...

  9. Unsupported major.minor version 51.0

    org/jboss/as/domain/management/security/adduser/AddUser : Unsupported major.minor version 51. 0 已编译好 ...

  10. 云计算之路-阿里云上:10:28-10:51云盾清洗以及IP切换引发的主站访问故障

    大家好,非常抱歉!今天10:28-10:51期间由于阿里云云盾流量清洗,以及切换IP后负载均衡的带宽跑满,影响了主站的正常访问,给您造成了很大的麻烦,请您谅解! 故障的过程是这样的: 10:28,我们 ...

随机推荐

  1. SDN与NFV技术在云数据中心的规模应用探讨

    Neo 2016-1-29 | 发表评论 编者按:以云数据中心为切入点,首先对SDN领域中的叠加网络.SDN控制器.VxLAN 3种重要技术特点进行了研究,接下来对NFV领域中的通用服务器性能.服务链 ...

  2. 51Nod-1091 线段的重叠

    51Nod 1091:  http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1091   1091 线段的重叠 基准时间限制: ...

  3. 【Chrome】新建Chrome插件,新建,事件行为,本地存储

    源:walkingq 1,新建:静态网站+manifest.json:[注:mainifest_version是chrome 18以后新增key] manifest.json 截图 2,事件行为: 3 ...

  4. 面向对象和面向过程的jquery版选项卡

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <script src ...

  5. 数据结构图文解析之:栈的简介及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

  6. 正则表达式解析url参数

    解析url参数正则:(?<=\?|&)[\w\={}\\\\,-:'\s'""]*(?=[^#\s]|) 意思是(?<=\?|&) 从?或&符号 ...

  7. a版本冲刺第三天

    队名:Aruba   队员: 黄辉昌 李陈辉 林炳锋 鄢继仁 张秀锋 章  鼎 学号 昨天完成的任务 今天做的任务 明天要做的任务 困难点 体会 408 看了构建之法的第二章和十三章 完成学习Java ...

  8. Javascript知识点记录(三)设计模式

    Javascript设计模式记录,这个方面确实是没写过,工作中也没有用到js设计模式的地方. prototype与面向对象取舍 使用prototype原型继承和使用面向对象,都可以实现闭包的效果.那么 ...

  9. JBoss 系列十四:JBoss7/WildFly如何加载外部的文件或properties文件

    http://www.tuicool.com/articles/M7ZR3y 原文 http://blog.csdn.net/kylinsoong/article/details/12623997 主 ...

  10. java.lang.NoClassDefFoundError:org/apache/commons/lang/exception/NestableRuntimeException错误的解决

    java.lang.NoClassDefFoundError 是运行时jvm找不到对应类.这种情况是少包的导致的.根据提示语添加对应的jar包就可以. 感叹一下:maven真是一个伟大的东西,在包的依 ...