Backtracking erstellt Kandidatenlösungen schrittweise und verwirft (zieht sich zurück aus) einen Teilkandidaten, sobald er nicht zu einer gültigen Lösung führen kann. Es durchsucht den Lösungsraum systematisch via DFS und beschneidet tote Enden.
Die Idee
Wähle -> erkunde -> mache die Wahl rückgängig. Versuche eine Option, wiederhole; wenn fehlgeschlagen, mache rückgängig und versuche die nächste.
Beispiel: alle Permutationen
():
result = []
():
remaining:
result.append(path[:])
i ((remaining)):
path.append(remaining[i])
backtrack(path, remaining[:i] + remaining[i+:])
path.pop()
backtrack([], nums)
result
permutations([, , ])
