加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

回溯法--八皇后问题

发布时间:2020-12-20 09:50:50 所属栏目:Python 来源:网络整理
导读:def queene(n): # 生成一个一维数组,下标存储行,值存储列 helpQueene([-1]* n,n) helpQueene(columnPositions,rowIndex,n): global count 回溯标志,即N个皇后都找到了相应的位置 if rowIndex == n: 计算总共有多少种 count+=1 打印输出 printSolution(col
def queene(n):
    #生成一个一维数组,下标存储行,值存储列
    helpQueene([-1]*n,n)
 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)
            
rowIndex:目前放置的行数,遍历这几行皇后的坐标
    for i  range(rowIndex):
        如果位于同一列,则返回False
        if columnPositions[i] == columnPositions[rowIndex]:
            return False
        如果位于对角线上,就返回False
        elif abs(columnPositions[i]-columnPositions[rowIndex])==(rowIndex-i):
             False
    否则返回True
     True
 printSolution(columnPositions,1)">for row  range(n):
        line=""
         range(n):
            if columnPositions[row]==column:
                line+="Q "
            else:
                line+='_ '
        print(line)
    print(n")

queene(8)
print(count)

部分输出:

?最后有:92种

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读