回溯法求解八皇后问题的代码
时间: 2023-11-22 13:05:31 浏览: 97
回溯算法求解 八皇后问题
5星 · 资源好评率100%
八皇后问题是一个经典的回溯问题,以下是求解该问题的代码:
```python
class EightQueens:
def __init__(self, n):
self.n = n # 棋盘大小
self.solution = [-1] * n # 解法数组
def is_valid(self, row, col):
# 判断当前位置是否合法
for i in range(row):
# 判断同一列是否有皇后
if self.solution[i] == col:
return False
# 判断对角线是否有皇后
if abs(i - row) == abs(self.solution[i] - col):
return False
return True
def backtrack(self, row):
# 找到解法
if row == self.n:
print(self.solution)
return
# 遍历每一列
for col in range(self.n):
# 判断当前位置是否合法
if self.is_valid(row, col):
self.solution[row] = col
# 继续寻找下一行的解法
self.backtrack(row + 1)
# 回溯
self.solution[row] = -1
def solve(self):
self.backtrack(0)
if __name__ == '__main__':
n = 8
eight_queens = EightQueens(n)
eight_queens.solve()
```
在这个代码中,我们定义了一个 EightQueens 类,其中包含了 is_valid 和 backtrack 两个函数。is_valid 函数用来判断当前位置是否合法,backtrack 函数用来回溯求解八皇后问题。
在主函数中,我们创建了一个 EightQueens 对象,然后调用了 solve 函数来求解八皇后问题。求解过程中,我们遍历每一行,对于每一行,我们遍历每一列,判断当前位置是否合法,如果合法,就将皇后放置在该位置,然后继续寻找下一行的解法。如果找到了解法,就输出解法。如果没有找到解法,就回溯到上一行,重新寻找解法。
阅读全文