Backtracking bouwt kandidaatoplossingen incrementeel op en verlaat (backtracking) een gedeeltelijke kandidaat zodra deze niet tot een geldige oplossing kan leiden. Het verkent de oplossingruimte systematisch via DFS en snoeidt doodslopende wegen weg.
Het idee
Kies -> verken -> ontkies. Probeer een optie, recurse; als het mislukt, maak het ongedaan en probeer de volgende.
Voorbeeld: alle permutaties
():
result = []
():
remaining:
result.append(path[:])
i ((remaining)):
path.append(remaining[i])
backtrack(path, remaining[:i] + remaining[i+:])
path.pop()
backtrack([], nums)
result
permutations([, , ])
