Description du problème:comment ajuster le code pour utiliser l'algorithme de retour arrière pour résoudre le problème de combinaison
Retourne toutes les combinaisons d'un tableau. par exemple, il y a un tableau [1, 2, 3], ses résultats sont:
[]
[1] [2] [3]
[1, 2] [1, 3] [2, 3]
[1, 2, 3]
Oui, je sais qu'il ya beaucoup de façons de résoudre ce problème. mais j'essaye de le résoudre avec l'algorithme de retour arrière. ci-dessous est mon code:
def p(arr):
ret = []
#using visited boolean array to avoid duplicate traverse and backtracking.
visited = [False] * len(arr)
def dfs(start_idx, temp)
ret.append(temp)
for i in range(start_idx, len(arr)):
if not visited[i]:
visited[i] = True
dfs(start_idx + 1, temp + [arr[i]])
visited[i] = False
dfs(0, [])
return ret
Il retourne [[], [1], [1, 2], [1, 2, 3], [1, 3], [2], [2, 3], [3], [3, 2]]
, qui a une mauvaise réponse [3, 2]
De ma compréhension, DSF + retours en arrière ne doit parcourir le tableau dans une direction qui est de gauche à droite. mais clairement [3, 2] est la direction inverse.
Comment comprendre cela et comment résoudre ce problème avec mon code?
Utilisez 'itertools.combinations'. –
haha, bien sûr. c'est genre de façons :) – LeoShi