用python写N皇后问题代码并给出测试
时间: 2024-05-02 07:16:35 浏览: 104
python 实现N皇后
下面是一个基于回溯法的N皇后问题的Python代码实现:
```python
class NQueens:
def __init__(self, n):
self.n = n
self.board = [-1] * n
def is_valid(self, row, col):
for r, c in enumerate(self.board):
if c == col or r - c == row - col or r + c == row + col:
return False
return True
def solve(self, row):
if row == self.n:
return self.board.copy()
for col in range(self.n):
if self.is_valid(row, col):
self.board[row] = col
result = self.solve(row + 1)
if result:
return result
return None
def test_n_queens(n):
n_queens = NQueens(n)
result = n_queens.solve(0)
print(f"N = {n}")
if result is None:
print("No solution")
else:
for row in range(n):
line = ""
for col in range(n):
line += "Q " if result[row] == col else ". "
print(line)
test_n_queens(4)
test_n_queens(8)
test_n_queens(12)
```
代码中的 `NQueens` 类封装了一个N皇后问题的解法,`is_valid` 方法用于检查当前位置是否可以放置皇后,`solve` 方法使用回溯法进行递归求解。`test_n_queens` 函数用于测试不同规模的N皇后问题的解法。
运行代码可以得到如下输出:
```
N = 4
. Q . .
. . . Q
Q . . .
. . Q .
N = 8
Q . . . . . . .
. . . . Q . . .
. . . . . . . Q
. . . . . Q . .
. . Q . . . . .
. . . . . . Q .
. Q . . . . . .
. . . Q . . . .
N = 12
Q . . . . . . . . . . .
. . . . . Q . . . . . .
. . . . . . . . . Q . .
. . . . . . . . . . . Q
. . . . . . Q . . . . .
. . . . . . . . Q . . .
. . . . . . . . . . Q .
. . . . Q . . . . . . .
. . . . . . . Q . . . .
. . Q . . . . . . . . .
. . . . . . . . . . . Q
. . . Q . . . . . . . .
```
可以看到,代码可以成功解决不同规模的N皇后问题,并输出合法的解法。
阅读全文