在Python中编写程序以检查棋盘是否为N皇后问题的有效解决方案
假设我们有一个n x n矩阵表示一个棋盘。其中有一些1和0,其中1表示皇后,0表示空单元格。我们必须检查棋盘是否是N皇后问题的有效解决方案。正如我们所知,棋盘是有效的N皇后问题的解决方案,其中没有两个皇后互相攻击。
因此,如果输入是
那么输出将是True
为了解决这个问题,我们将按照以下步骤进行:
- n:矩阵的行数
- 行:一个新集合,列:一个新集合,对角线:一个新集合,反对角线:一个新集合
- 对于i从0到n,
- 对于j从0到n,
- 如果矩阵[i,j]为1,
- 将i插入到行中
- 将j插入到列中
- 将(i-j)插入到对角线中
- 将(i+j)插入到反对角线中
- 对于j从0到n,
- 当行的大小、列的大小、对角线的大小、反对角线的大小与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