पाठ 33 / 42
Backtracking
उम्मीदवार को चरण दर चरण बनाएँ; जैसे ही यह काम न कर सके, छोड़ दें।
चुनें, खोजें, अ-चुनें
हर चरण पर: एक चुनाव करें, recurse करें, फिर अगला आज़माने से पहले चुनाव पूर्ववत करें। उन शाखाओं को काटें जो पहले से बाधा तोड़ती हैं। यह आंशिक हलों के tree पर DFS है।
सभी क्रमचय
path वर्तमान आंशिक व्यवस्था है; जोड़ें, recurse करें, pop करें।
def permutations(nums):
res, path, used = [], [], [False] * len(nums)
def bt():
if len(path) == len(nums):
res.append(path[:])
return
for i, n in enumerate(nums):
if used[i]:
continue
used[i] = True; path.append(n)
bt()
used[i] = False; path.pop() # un-choose
bt()
return resक्लासिक समस्याएँ
Subsets, combinations, permutations, N-Queens, Sudoku, word search, वैध parentheses बनाना। लागत अक्सर घातांकी — अच्छी pruning ही पूरा खेल है।