码迷,mamicode.com
首页 > 其他好文 > 详细

回溯法--八皇后问题

时间:2019-11-24 00:04:10      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:line   src   column   否则   turn   abs   span   class   pos   

def queene(n):
    #生成一个一维数组,下标存储行,值存储列
    helpQueene([-1]*n,0,n)
def helpQueene(columnPositions,rowIndex,n):
    global count
    #回溯标志,即N个皇后都找到了相应的位置
    if rowIndex == n:
        #计算总共有多少种
        count+=1
        #打印输出
        printSolution(columnPositions,n)
        return
    #0-7共8列
    for column in range(n):
        #rowIndex的值先从0开始,相当于(rowIndex,column)是一个皇后的坐标,共(0,0)...(7,7)
        columnPositions[rowIndex]=column
        #放置一个就判断是否有效,如果有效,就到下一行放置
        if isValid(columnPositions,rowIndex):
            helpQueene(columnPositions,rowIndex+1,n)
            
def isValid(columnPositions,rowIndex):
    #rowIndex:目前放置的行数,遍历这几行皇后的坐标
    for i in range(rowIndex):
        #如果位于同一列,则返回False
        if columnPositions[i] == columnPositions[rowIndex]:
            return False
        #如果位于对角线上,就返回False
        elif abs(columnPositions[i]-columnPositions[rowIndex])==(rowIndex-i):
            return False
    #否则返回True
    return True
def printSolution(columnPositions,n):
    for row in range(n):
        line=""
        for column in range(n):
            if columnPositions[row]==column:
                line+="Q "
            else:
                line+=_ 
        print(line)
    print("\n")

queene(8)
print(count)

部分输出:

技术图片

 最后有:92种

回溯法--八皇后问题

标签:line   src   column   否则   turn   abs   span   class   pos   

原文地址:https://www.cnblogs.com/xiximayou/p/11920742.html

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