n皇后问题 n*n的放个棋盘上放置n个皇后,要求每个皇后不同行,不同列,不同左右对角线。 输入格式: n皇后的n值 输出格式: n皇后对应的解法
时间: 2024-03-07 19:47:13 浏览: 135
该程序能求解n皇后问题,即在n*n方格棋盘上放置n个皇后,要求每个皇后不同行、不同列、不同左右对角线
5星 · 资源好评率100%
好的,这是一个经典的回溯算法问题。我们可以使用递归函数来实现。下面是示例代码:
```python
def solveNQueens(n: int) -> List[List[str]]:
res = []
board = [['.' for _ in range(n)] for _ in range(n)]
def isValid(row: int, col: int) -> bool:
for i in range(n):
if board[i][col] == 'Q': # 检查列
return False
if row + i < n and col + i < n and board[row+i][col+i] == 'Q': # 检查右上方
return False
if row + i < n and col - i >= 0 and board[row+i][col-i] == 'Q': # 检查左上方
return False
if row - i >= 0 and col + i < n and board[row-i][col+i] == 'Q': # 检查右下方
return False
if row - i >= 0 and col - i >= 0 and board[row-i][col-i] == 'Q': # 检查左下方
return False
return True
def backtrack(row: int) -> None:
if row == n:
res.append([''.join(row) for row in board])
return
for col in range(n):
if isValid(row, col):
board[row][col] = 'Q'
backtrack(row + 1)
board[row][col] = '.'
backtrack(0)
return res
```
输入一个整数n,代表n皇后问题中棋盘的大小,输出一个列表,其中每个元素是一个长度为n的字符串,表示一种解法。例如,当n=4时,一个可能的解法为:
```
[
[".Q..", "...Q", "Q...", "..Q."],
["..Q.", "Q...", "...Q", ".Q.."]
]
```
注意:这个问题的解法不是唯一的,所以您可能会得到其他的答案。
阅读全文