У меня есть словарь с ключами, представляющими узлы и значения, представляющие возможные узлы, к которым может пройти ключ.Python: список всех возможных путей в графике, представленном в словаре
Пример:
dependecyDict = { 'A': ['D'], 'B': ['A', 'E'], 'C': ['B'], 'D': ['C'], 'G':['H']}
Я хочу создать новую dicitonary, ChainsDict, который будет содержать все «ценности», что каждый «ключ» может траверс с помощью dependecyDict.
Например, выход из программы с этим примером будет:
ChainsDict = {'A': ['D', 'C', 'B','E'], 'B':['A','D','C','E'], 'C':['B','A','D','E'], 'D':['C','B','A','E'], 'G': ['H']}
Я думаю, что с помощью рекурсивного алгоритма является лучшим способом идти о принятии решения, и я попытался модифицировать кратчайший путь, пересекающий алгоритм следующим образом:
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
Этот код, однако возникают проблемы, захватив правильный вывод, когда ключ в dependecyDict имеет более чем одно значение. Я нашел хакерское решение, но оно не очень элегантно. Любая помощь приветствуется, спасибо!