Quay lui (Backtracking)
Backtracking là gì?
Backtracking là kỹ thuật thử tất cả các khả năng bằng cách:
- Xây dựng từng phần của nghiệm
- Nếu phần hiện tại không dẫn đến nghiệm → quay lui
Sinh hoán vị (Permutations)
Python
def permutations(nums):
result = []
def backtrack(path, remaining):
if not remaining:
result.append(path[:])
return
for i in range(len(remaining)):
path.append(remaining[i])
backtrack(path, remaining[:i] + remaining[i+1:])
path.pop() # Backtrack
backtrack([], nums)
return resultN-Queens
Python
def solve_n_queens(n):
result = []
board = [['.'] * n for _ in range(n)]
def is_safe(row, col):
for i in range(row):
if board[i][col] == 'Q':
return False
for i, j in zip(range(row-1, -1, -1), range(col-1, -1, -1)):
if board[i][j] == 'Q':
return False
for i, j in zip(range(row-1, -1, -1), range(col+1, n)):
if board[i][j] == 'Q':
return False
return True
def backtrack(row):
if row == n:
result.append([''.join(r) for r in board])
return
for col in range(n):
if is_safe(row, col):
board[row][col] = 'Q'
backtrack(row + 1)
board[row][col] = '.'
backtrack(0)
return result💡
Pruning (Cắt tỉa): Loại bỏ nhánh không triển vọng sớm để tối ưu!
Tiếp theo: Duyệt đồ thị (BFS/DFS)
Last updated on