Backtracking (quay lui) xây dựng các lời giải ứng viên một cách tăng dần và từ bỏ (quay lui khỏi) một ứng viên bộ phận ngay khi nó không thể dẫn đến một lời giải hợp lệ. Nó khám phá không gian lời giải một cách hệ thống thông qua DFS, cắt tỉa (pruning) các ngõ cụt.
Ý tưởng
Chọn -> khám phá -> bỏ chọn. Thử một phương án, đệ quy; nếu thất bại, hoàn tác nó và thử phương án tiếp theo.
Ví dụ: tất cả các hoán vị
():
result = []
():
remaining:
result.append(path[:])
i ((remaining)):
path.append(remaining[i])
backtrack(path, remaining[:i] + remaining[i+:])
path.pop()
backtrack([], nums)
result
permutations([, , ])
