Le backtracking construit des solutions candidates de manière incrémentale et les abandonne (revient en arrière) dès qu'une solution partielle ne peut pas mener à une solution valide. Il explore systématiquement l'espace des solutions via DFS, en élaguant les branches mortes.
L'idée
Choisir -> explorer -> dé-choisir. Essayer une option, récurser ; si elle échoue, l'annuler et essayer la suivante.
Exemple : toutes les permutations
():
result = []
():
remaining:
result.append(path[:])
i ((remaining)):
path.append(remaining[i])
backtrack(path, remaining[:i] + remaining[i+:])
path.pop()
backtrack([], nums)
result
permutations([, , ])
