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

      由于八皇后问题很著名不再详述,直接贴代码:

     1 import random
     2 
     3 #判断是否冲突的函数
     4 def conflict(state,nextX):
     5     nextY=len(state)
     6     for i in range(nextY):
     7         if abs(state[i]-nextX) in (0,nextY-i):
     8         #abs(state[i]-nextX)等于0表示在同一行,abs(state[i]-nextX)等于nextY-i表示在同一列
     9             return True
    10         return False
    11     
    12 def queens(num,state=()):
    13     #假设剩最后一个皇后没有位置时(对应当前皇后),遍历所有位置返回没有冲突的位置
    14     for pos in range(num):
    15         if not conflict(state, pos):
    16             if len(state)==num-1:
    17                 yield(pos,)
    18                 #当元组只有一个元素时应该加,
    19             else:
    20                 for result in queens(num, state+(pos,)):
    21                     yield(pos,)+result
    22   
    23                 
    24 def prettyprint(solution):      #输出皇后问题的矩阵 ,Q表示皇后的位置 
    25     def line(pos,length=len(solution)):
    26         return 'X'*(pos)+'Q'+'X'*(length-1-pos)
    27     for pos in solution:
    28         print line(pos)
    29 
    30 if __name__=='__main__':
    31     prettyprint(random.choice(list(queens(8))))
    32     #由于queens生成多种解决方案,random模块的choice方法会从一个有序类型中随机选一个

    输出结果:

    QXXXXXXX
    XXXXXXQX
    XXXQXXXX
    XQXXXXXX
    XXQXXXXX
    XQXXXXXX
    XXXXQXXX
    XXXXXQXX

  • 相关阅读:
    模板方法设计模式
    单一职责原则
    开闭原则
    uml
    迭代器模式
    观察者模式
    工厂模式
    代理模式
    idea本地Maven仓库不能下载依赖jar包的解决方案
    selenium 使用教程详解-java版本
  • 原文地址:https://www.cnblogs.com/lkprof/p/3175483.html
Copyright © 2011-2022 走看看