我需要找到到给定目标的最长路径。数据是一个 id 字典,其值是指向该 id 的所有 id 的列表。另外值得注意的是,每个 ID 只能指向另一个 ID。
我尝试编写一个递归函数,它将遍历每个可能的路径,并将每个唯一路径选项存储到另一个列表中,从中我将找到最长的路径。
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))
我得到主要的路径堆叠在彼此之上。我将如何修复代码以使路径不会堆叠。我希望主要看起来像
[['B2'],
['B2','E3'],
['B2','A1'],
['B2','A1','C3'],
['B6'],
['B6','D3'],
['B6','D3','F1'],
['B6','D3','A2'],
['B6','D3','A2','G8']]
编辑:
更改行main, vec, id = create(main,[],'D4')
以main, vec, id = create([],[],'D4')
澄清这main
是一个列表列表。