栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

n皇后--python

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

n皇后--python

n皇后

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 ‘Q’ 和 ‘.’ 分别代表了皇后和空位。

力扣上的第51题
这道题困扰了我好久,一直都不会(流泪),看来很多资料,现在终于会做了

话不多说
N皇后是回溯的经典问题,想要解决这个问题,我们首先想要知道回溯是什么

什么是回溯算法
回溯算法,一种通过探索所有可能的候选解来找出所有的解的算法。

它采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况:

找到一个可能存在的正确的答案; 在尝试了所有可能的分步方法后宣告该问题没有答案。

解题思路
我们用一个for循环来遍历列,用回溯来遍历行。
列如,我们想要在第一行第一列放皇后,那么我们需要先判断此位置是不是可以放皇后,所以需要写一个判断当前位置能否放置皇后的函数,当第一行第一列可以放置时,通过回溯到达下一行,接着判断,依次执行,直到运行到第n行时,将结果放入到结果集中。

代码

def is_vaild(row,col,board):
    for i in range(row):
        if board[i][col]=='Q':
            return False
    for j in range(col):
        if board[row][j]=='Q':
            return False
    i=row-1
    j=col-1
    while i>=0 and j>=0:
        if board[i][j]=='Q':
            return False
        i-=1
        j-=1
    i=row-1
    j=col+1
    while i>=0 and j 

执行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/755148.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号