Ich habe ein Wörterbuch mit Schlüsseln, die Knoten und Werte darstellen, die mögliche Knoten darstellen, auf die der Schlüssel zugreifen kann.Python: Liste aller möglichen Pfade in einem Diagramm, das durch das Wörterbuch dargestellt wird
Beispiel:
dependecyDict = { 'A': ['D'], 'B': ['A', 'E'], 'C': ['B'], 'D': ['C'], 'G':['H']}
Ich möchte ein neues dicitonary erstellen, ChainsDict, die alle ‚Werte‘ enthalten, die jeder ‚Schlüssel‘, um mittels dependecyDict durchqueren können.
Zum Beispiel wird die Ausgabe des Programms mit diesem Beispiel sein:
ChainsDict = {'A': ['D', 'C', 'B','E'], 'B':['A','D','C','E'], 'C':['B','A','D','E'], 'D':['C','B','A','E'], 'G': ['H']}
Ich denke, einen rekursiven Algorithmus verwendet, ist der beste Weg, um eine Lösung zu gehen darum, und ich versuchte, einen kürzesten Weg zu modifizieren durchquert Algorithmus wie folgt:
def helper(dependencyDict, ChainsDict):path = []
for key in dependencyDict:
path = path + [(recursiveRowGen(dependencyDict,key))]
for paths in path:
ChainsDict[paths[0]] = paths[1:]
print(finalLineDict)
def recursiveRowGen(dependencyDict,key,path = []):
path = path + [key]
if not key in dependencyDict:
print("no key: ",key)
return path
print(dependencyDict[key])
for blocking in dependencyDict[key]:
if blocking not in path:
newpath = recursiveRowGen(dependencyDict,blocking,path)
if newpath:
return newpath
return path
Dieser Code hat jedoch Probleme beim Erfassen der richtigen Ausgabe, wenn ein Schlüssel in AbhängigkeitDict mehr als einen Wert hat. Ich fand eine Hacky-Lösung, aber es fühlt sich nicht sehr elegant an. Jede Hilfe wird geschätzt, danke!