• 回溯法--八皇后问题


    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("
    ")
    
    queene(8)
    print(count)

    部分输出:

     最后有:92种

  • 相关阅读:
    判断文件结束,feof……
    第五篇 分治思想(例子待加)
    第四篇 枚举思想
    第三篇 贪心思想
    第二篇 递归思想
    第一篇 递推思想
    爬虫系列
    整数划分问题
    html中a标签做容器的问题
    H5学习小结——div+css创建电子商务静态网页
  • 原文地址:https://www.cnblogs.com/xiximayou/p/11920742.html
Copyright © 2020-2023  润新知