【发布时间】:2019-09-27 17:28:37
【问题描述】:
假设我有一个这样的列表:
[
[1, [2, 3]],
[2, [4, 5]],
[4, [6, 7]],
[3, [7]]
]
我想编写能找到从1 到7 的最短路径的代码,在这种情况下,就是1 -> 3 -> 7。
这是我目前所拥有的:
start = 1
lst = [[1, [2, 3]], [2, [4, 5]], [4, [6, 7]], [3, [7]]]
def getIt(start):
for nest in lst:
if start == lst[0]:
return(nest[1])
allLists = []
loopCleaner = []
def travel(paths, totalList):
if paths is not None:
if 7 in paths:
allLists.append(totalList)
else:
for path in paths:
if path not in loopCleaner:
loopCleaner.append(path)
totalList.append(path)
travel(getIt(path), totalList)
print(travel(lst, []))
我正在尝试混合使用递归和循环,但它要么输出太长的路径,要么只输出无。
我的逻辑:通过getIt获取所有可能的嵌套列表。
然后通过递归遍历它们,并在它下降时继续添加到总列表,直到在其中一个路径中找到 7。在这种情况下,我们结束并退出。我如何以这样的方式编码,我只需得到[1, 3, 7]?
【问题讨论】:
-
该列表看起来像一个邻接矩阵。你研究过 Djikstras 算法的最短路径吗?
-
NetworkX模块实现了shortest_path()函数,如@rdas 所述,如果您设法将其转换为邻接矩阵或图形,您应该很容易找到最短的路径 -
我没试过,我怎么把它变成邻接矩阵还是已经?