Backtracking buduje kandidátní řešení postupně a opouští (ustupuje z) částečného kandidáta jakmile nemůže vést k platnému řešení. Systematicky prozkoumává prostor řešení prostřednictvím DFS a odsekává slepé uličky.
Myšlenka
Zvolte -> prozkoumejte -> zrušte volbu. Vyzkoušejte možnost, opakujte; pokud selže, vraťte se a vyzkoušejte další.
Příklad: všechny permutace
():
result = []
():
remaining:
result.append(path[:])
i ((remaining)):
path.append(remaining[i])
backtrack(path, remaining[:i] + remaining[i+:])
path.pop()
backtrack([], nums)
result
permutations([, , ])
