什么是回溯算法,写一个简单的案例
时间: 2024-09-20 22:05:46 浏览: 32
使用javascript写的全排列算法演示(分为回溯法演示和交换法演示)
回溯算法是一种用于解决搜索空间非常大,且存在大量冲突的决策问题的通用策略。它通过尝试所有可能的解决方案,每当遇到无法继续的情况(称为剪枝条件),就返回到上一步,改变先前的选择,直到找到满足条件的解或者确定不存在这样的解。
一个简单的八皇后问题就是一个经典的回溯算法案例。目标是在一个8x8的棋盘上放置八个皇后,使得任意两个皇后不在同一条横行、竖列或对角线上。以下是用Python编写的简单示例:
```python
def solve_n_queens(board_size):
def is_safe(row, col):
# 检查行、列是否有冲突
for i in range(col):
if board[row][i] == 1 or \
board[i][col] == 1 or \
abs(board[row]-i) == abs(col-i):
return False
return True
def place_queen(row):
if row >= board_size:
non_empty_queens.append(board)
else:
for col in range(board_size):
if is_safe(row, col):
board[row][col] = 1
place_queen(row + 1)
board[row][col] = 0 # 回溯:移除皇后
board = [0] * board_size
non_empty_queens = []
place_queen(0)
return non_empty_queens
# 使用8皇后问题测试
solutions = solve_n_queens(8)
for sol in solutions:
print(sol)
阅读全文