Мне нужно найти самый длинный путь к данной цели.Данные представляют собой словарь идентификаторов со значением, представляющим список всех идентификаторов, которые указывают на этот идентификатор.Также стоит отметить, что каждый идентификатор может указывать только на один другой идентификатор.
Я пытался написать рекурсивную функцию, которая будет проходить через каждый возможный путь, и сохранять каждый уникальный параметр пути в другом списке, из которого я найдусамый длинный путь.
def create(main, vec, id):
if (id not in INFO):
return(main, vec, id)
else:
for source in INFO[id]:
vec.append(source)
main.append(vec)
main, vec, id = create(main, vec, source)
return main,vec,id
и самая длинная функция
def longest(main):
longest = 0
long_list = 0
for list in main:
if len(list) > longest:
long_list = list
longest = len(list)
return long_list
при выполнении
INFO = {
'D4': ['B2','B6'],
'B6': ['D3'],
'D3': ['F1','A2'],
'A2': ['G8'],
'A1': ['C3'],
'B2': ['E3','A1']}
main, vec, id = create([],[],'D4')
print(longest(main))
Я получаю main, чтобы пути располагались поверх друг друга.Как бы я исправить код, чтобы пути не складывались.Я надеюсь, что main будет выглядеть примерно так:
[['B2'],
['B2','E3'],
['B2','A1'],
['B2','A1','C3'],
['B6'],
['B6','D3'],
['B6','D3','F1'],
['B6','D3','A2'],
['B6','D3','A2','G8']]
EDIT:
Изменена строка main, vec, id = create(main,[],'D4')
на main, vec, id = create([],[],'D4')
, чтобы уточнить, что main
это списоксписков.