Backtracking membina calon penyelesaian secara berperingkat dan meninggalkan (backtrack daripada) sesuatu calon separa sebaik sahaja ia tidak boleh membawa kepada penyelesaian yang sah. Ia meneroka ruang penyelesaian secara sistematik melalui DFS, sambil memangkas jalan buntu.
Ideanya
Pilih -> teroka -> nyahpilih. Cuba sesuatu pilihan, recurse; jika ia gagal, batalkannya dan cuba yang seterusnya.
Contoh: semua permutasi
():
result = []
():
remaining:
result.append(path[:])
i ((remaining)):
path.append(remaining[i])
backtrack(path, remaining[:i] + remaining[i+:])
path.pop()
backtrack([], nums)
result
permutations([, , ])
