Skip to Content
🧮 CTDL & Giải thuật↩️ Quay lui (Backtracking)

Quay lui (Backtracking)

Backtracking là gì?

Backtracking là kỹ thuật thử tất cả các khả năng bằng cách:

  1. Xây dựng từng phần của nghiệm
  2. Nếu phần hiện tại không dẫn đến nghiệm → quay lui

Sinh hoán vị (Permutations)

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 result

N-Queens

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