学习笔记 | Python版本 面试题 08.12. 八皇后

本文探讨了八皇后问题的解决方案,详细解释了一种使用Python编写的算法,该算法能在N×N棋盘上放置皇后,确保它们不在同一行、列或对角线上。扩展了原题的内容,提供了具体的代码示例。
摘要由CSDN通过智能技术生成

面试题 08.12. 八皇后

  • 设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。

注意:本题相对原题做了扩展

示例:

 输入:4
 输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]

 解释: 4 皇后问题存在如下两个不同的解法。
 
[
 [".Q..",  // 解法 1
  "...Q",
  "Q...",
  "..Q."],

 ["..Q.",  // 解法 2
  "Q...",
  "...Q",
  ".Q.."]
]

Code:

class Solution(object):
    def __init__(self):
        self.ans = []

    def solveNQueens(self, n):
        """
        :type n: int
        :rtype: List[List[str]]
        """
        self.helper([-1]*n,0,n)
        return self.ans
    
    def helper(self,columnPositions,rowIndex,n):
        if rowIndex == n:
            self.printSolution(columnPositions,n)
            return

        for column in range(n):
            columnPositions[rowIndex] = column
            if self.isValid(columnPositions,rowIndex):
                self.helper(columnPositions,rowIndex+1,n)

    def isValid(self,columnPositions,rowIndex):
        for i in range(rowIndex):
            if columnPositions[i] == columnPositions[rowIndex]:
                return False
            elif abs(columnPositions[i]-columnPositions[rowIndex]) == rowIndex-i:
                return False #检查两条斜线上
        return True

    def printSolution(self,columnPositions,n):
        tmp = []
        for row in range(n):
            line = ""
            for column in range(n):
                if columnPositions[row] == column:
                    line += "Q"
                else:
                    line += "."
            tmp.append(line)
        self.ans.append(tmp)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值