zoukankan      html  css  js  c++  java
  • python解决八皇后问题的方法

    #!/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))))
  • 相关阅读:
    解决计算机改名无法连接TFS的问题
    MysqlHelper使用反射机制智能推算数据类型以及属性名称
    Cakephp中使用JavaScriptHelper来引入js文件
    CakePHP程序员必须知道的21条技巧
    cakephp文件结构
    去掉字符串前后所有空格
    小程序 支持html富文本吗
    2018年五月博客整理
    Angular cookies
    webstorm 快捷键
  • 原文地址:https://www.cnblogs.com/theWinter/p/9633386.html
Copyright © 2011-2022 走看看