Leetcode做题日记:52. N皇后 II(PYTHON)

n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。

示例:

输入: 4
输出: 2
解释: 4 皇后问题存在如下两个不同的解法。
[
[".Q…", // 解法 1
“…Q”,
“Q…”,
“…Q.”],

["…Q.", // 解法 2
“Q…”,
“…Q”,
“.Q…”]
]
第一次的代码,和上一题N皇后问题代码几乎一模一样,这题甚至更简单,不需要整理输出的棋盘,直接输出列表的长度,即可行棋盘个数就行

	def buchongtu(xu,nextx): #定义一个不冲突函数
            nexty=len(xu) #y坐标就是列表xu的长度,即要放皇后的新的那一行
                          #因为第一个皇后的行的第0行
            k=0 #判断与第k行皇后是否冲突
            for i in xu:
                if i+k==nextx+nexty: #第一种情况,这里的k表示以存在的皇后
                                     #的行坐标y
                    return False
                elif i-k==nextx-nexty: #第二种情况
                    return False
                elif i==nextx: #第三种情况
                    return False
                k+=1
            return True #都不冲突,返回True   
       
        def queen(xulie,n,ans):
            if len(xulie)==n: #有n个皇后,递归结束
                ans.append(xulie) #可行棋盘会被加到ans列表中
            else:
                for i in range(n): #还可加皇后,开始在下一行加入皇后
                    if buchongtu(xulie,i): #如果i位置可行
                        queen(xulie+[i],n,ans) #i位置加入棋盘xulie,递归
       

	aa=[]
        queen([],n,aa) 
        return len(aa) #返回列表中有多少个可行的棋盘

76ms,排名65%

猜你喜欢

转载自blog.csdn.net/weixin_44033136/article/details/86586980