Backtracking construiește soluții candidate incremental și abandoneaza (se retrage din) un candidat parțial de îndată ce acesta nu poate duce la o soluție validă. Explorează sistematic spațiul de soluții prin DFS, tăind capete moarte.
Ideea
Alege -> explorează -> dezalege. Încearcă o opțiune, recursează; dacă eșuează, anulează și încearcă următoarea.
Exemplu: toate permutările
():
result = []
():
remaining:
result.append(path[:])
i ((remaining)):
path.append(remaining[i])
backtrack(path, remaining[:i] + remaining[i+:])
path.pop()
backtrack([], nums)
result
permutations([, , ])
