Wycofywanie buduje kandydujące rozwiązania inkrementalnie i porzuca (cofa się) z częściowego kandydata tak szybko, jak tylko nie może on prowadzić do ważnego rozwiązania. Systematycznie eksploruje przestrzeń rozwiązań poprzez DFS, ocinając ślepe zaułki.
Idea
Wybierz -> eksploruj -> usuń wybór. Spróbuj opcję, rekurencja; jeśli się nie powiedzie, cofnij ją i spróbuj następną.
Przykład: wszystkie permutacje
():
result = []
():
remaining:
result.append(path[:])
i ((remaining)):
path.append(remaining[i])
backtrack(path, remaining[:i] + remaining[i+:])
path.pop()
backtrack([], nums)
result
permutations([, , ])
