我有以下图表(相应的边值写在括号中):
L0 -> L1 ('01')
L1 -> L2 ('12')
L1 -> L4 ('14')
L4 -> L5 ('45')
L2 -> L3 ('23')
L3 -> L1 ('31')
现在我需要从L0
开始的所有可能路径的边值的列表。因此,如果length = 3
(不包括起始节点),我应该得到两个列表:
['01', '12', '23'] and ['01', '14', '45'].
允许循环遍历。我试着用两级字典来表示这个图。你知道吗
graph = {'L0': {'L1': '01'}, 'L1': {'L2': '12', 'L4': '14'}, 'L2': {'L3': '23'}, 'L3': {'L1': '31'}, 'L4': {'L5': '45'}}
def find_path(graph, start, depth):
k = 0
while k < depth:
a = graph[start]
for node in graph[start]:
start = node
path.append(a[node])
k+=1
return path
print find_path(graph, 'L0', 4)
显然,它给出了一个可能的路径输出。但我想要所有可能的。你知道吗
我会让它递归地继续前进,直到达到极限或者无法继续前进。你知道吗
在图形上使用(在给定的表示形式中),可以得到:
我将它表示为一个简单的
edge:edge
字典:然后你可以迭代它:
每个
[0, 1, 2, 3]
到[(0,1), (1,2), (2,3)]
的转换可以在单独的步骤中完成。你知道吗它也适用于图形:
然后可以将每个路径转换为
['01', '14', '45']
形式。你知道吗既然您似乎想知道如何进行最后的转换,这里有一个方法:
zip(path, path[1:])
将[1, 2, 3, 4]
变成[(1, 2), (2, 3), (3, 4)]
。你知道吗for a, b in
将获取每一对,并将a
和b
设置为其中的项。你知道吗然后
links[a][b]
将从字典中查找路径名。你知道吗yield
一次返回一个项目,因此必须对join_paths
的输出调用list
才能将其放入列表中。你知道吗相关问题 更多 >
编程相关推荐