在Python中编写程序以检查棋盘是否为N皇后问题的有效解决方案

在Python中编写程序以检查棋盘是否为N皇后问题的有效解决方案

假设我们有一个n x n矩阵表示一个棋盘。其中有一些1和0,其中1表示皇后,0表示空单元格。我们必须检查棋盘是否是N皇后问题的有效解决方案。正如我们所知,棋盘是有效的N皇后问题的解决方案,其中没有两个皇后互相攻击。

因此,如果输入是

在Python中编写程序以检查棋盘是否为N皇后问题的有效解决方案

那么输出将是True

为了解决这个问题,我们将按照以下步骤进行:

  • n:矩阵的行数
  • 行:一个新集合,列:一个新集合,对角线:一个新集合,反对角线:一个新集合
  • 对于i从0到n,
    • 对于j从0到n,
      • 如果矩阵[i,j]为1,
      • 将i插入到行中
      • 将j插入到列中
      • 将(i-j)插入到对角线中
      • 将(i+j)插入到反对角线中
  • 当行的大小、列的大小、对角线的大小、反对角线的大小与n相同时,返回true,否则返回false

让我们看以下实现,以获得更好的理解:

示例

class Solution:
   def solve(self, matrix):
      n = len(matrix)

      rows = set()
      cols = set()
      diags = set()
      rev_diags = set()

      for i in range(n):
         for j in range(n):
            if matrix[i][j]:
               rows.add(i)
               cols.add(j)
               diags.add(i - j)
               rev_diags.add(i + j)

      return len(rows) == len(cols) == len(diags) == len(rev_diags) == n

ob = Solution()
matrix = [
   [0, 0, 0, 1, 0],
   [0, 1, 0, 0, 0],
   [0, 0, 0, 0, 1],
   [0, 0, 1, 0, 0],
   [1, 0, 0, 0, 0]
]
print(ob.solve(matrix))

输入

matrix = [
   [0, 0, 0, 1, 0],
   [0, 1, 0, 0, 0],
   [0, 0, 0, 0, 1],
   [0, 0, 1, 0, 0],
   [1, 0, 0, 0, 0]
]

输出

True

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程