バックトラッキングは候補解をインクリメンタルに構築し、有効な解に至らない可能性が生じるとすぐに部分的な候補を放棄(バックトラック)します。DFSを通じてソリューション空間を体系的に探索し、デッドエンドを枝刈りします。
考え方
選択 -> 探索 -> 選択解除。オプションを試して再帰し、失敗したら元に戻して次を試します。
例:すべての順列
python
():
result = []
():
remaining:
result.append(path[:])
i ((remaining)):
path.append(remaining[i])
backtrack(path, remaining[:i] + remaining[i+:])
path.pop()
backtrack([], nums)
result
permutations([, , ])
