Backtracking bygger kandidatlösningar stegvis och överger (backtrackar från) en partiell kandidat så snart den inte kan leda till en giltig lösning. Det utforskar systematiskt lösningsrummet via DFS och prunar döda ändar.
Idén
Välj -> utforska -> ångra. Prova ett alternativ, rekursera; om det misslyckas, ångra det och prova nästa.
Exempel: alla permutationer
():
result = []
():
remaining:
result.append(path[:])
i ((remaining)):
path.append(remaining[i])
backtrack(path, remaining[:i] + remaining[i+:])
path.pop()
backtrack([], nums)
result
permutations([, , ])
