Python的n皇后

笔记2024-04-244 人已阅来源:网络

Python是一种高级编程语言,可用于解决各种计算问题,包括数学问题。其中一个经典的数学问题是n皇后问题。这个问题涉及到如何在n×n的棋盘上放置n个皇后,使得它们不互相攻击,即不能在同一行、同一列或同一对角线上出现两个皇后。以下是一个Python实现的n皇后问题的例子。

def is_attacked(i, j, board):
for k in range(len(board)):
if board[i][k] == 1 or board[k][j] == 1:
return True
for k in range(len(board)):
for l in range(len(board)):
if (k + l) == (i + j) or (k - l) == (i - j):
if board[k][l] == 1:
return True
return False
def n_queens(n, board=[], row=0):
if row == n:
return board
for i in range(n):
if not is_attacked(row, i, board):
board.append([0] * n)
board[row][i] = 1
if n_queens(n, board, row+1):
return board
board.pop()
return False
n = int(input("请输入想要放置的皇后数量:"))
board = n_queens(n)
if board == False:
print("无法放置皇后。")
else:
for row in board:
print(row)

首先定义了一个函数is_attacked,它检查给定的坐标是否被攻击,如果被攻击则返回True,否则返回False。接下来定义了主函数n_queens,它开始时创建一个空棋盘,并尝试放置皇后。如果可以放置,就递归地调用自己,直到完成。最后调用n_queens函数,并打印出棋盘。