Backtracking สร้างวิธีแก้ปัญหาโครงสร้างทีละขั้นตอน และ ยกเลิก (ย้อนกลับจาก) ผู้สมัครบางส่วนทันทีที่มันไม่สามารถนำไปสู่วิธีแก้ปัญหาที่ถูกต้องได้ มันสำรวจพื้นที่วิธีแก้ปัญหาอย่างเป็นระบบผ่าน DFS โดยตัดแต่งกิ่งไม้ที่ตายแล้ว
แนวคิด
เลือก -> สำรวจ -> เลิกเลือก ลองตัวเลือก ทำซ้ำ; หากล้มเหลว ให้เลิกเลือกและลองตัวเลือกถัดไป
ตัวอย่าง: การเรียงสับเปลี่ยนทั้งหมด
():
result = []
():
remaining:
result.append(path[:])
i ((remaining)):
path.append(remaining[i])
backtrack(path, remaining[:i] + remaining[i+:])
path.pop()
backtrack([], nums)
result
permutations([, , ])
