我在解析这个图表字典时遇到了问题:
routes = {'a': [('b', 5.0), ('c', 8.0)], 'c': [('a', 8.0), ('d', 2.0)],
'b' [('a', 5.0), ('d', 6.0)], 'e': [('d', 12.0), ('g', 3.0)],
'd': [('b', 6.0),('c', 2.0), ('e', 12.0), ('f', 2.0)], 'g': [('e', 3.0),
('f', 7.0)],'f': [('d',2.0), ('g', 7.0)]}
如何在通过DFS搜索查看2个键时运行字典时分离出每个边的值?我对dict不是很熟悉。
到目前为止,我有,
def dfs(graph, start, end, path):
path = path + [start]
if start == end:
paths.append(path)
for node in graph.childrenOf(start):
if node not in path:
dfs(graph, node, end, path)
我需要返回最小的加权路径,所以我需要将值中的数字分开并在程序运行时求和。
答案 0 :(得分:1)
您可以使用词典词典来构建图表:
routes = {'a': {'b': 5.0, 'c': 8.0}, 'c': {'a': 8.0, 'd': 2.0}}
然后routes['a']['b']
将返回权重,在这种情况下为5.0
。如果您需要获取节点的所有子节点,则可以执行routes['a'].keys()
并返回['c', 'b']
。
答案 1 :(得分:0)
routes
是您的图表,采用邻接列表格式。每个键都是一个节点,该值是(other_node, edge_weight)
元组的列表。所以你要找的是“graph.childrenOf”应该如何工作。
假设start, end
是简单的字符串节点名称(如'a'
),您可以在字典中查找它们;例如graph[a]
会给你[('b', 5.0), ('c', 8.0)]
。您可以使用python的漂亮的内置元组解包直接迭代节点和权重,如下所示:
# replace your for loop with this:
for node, weight in graph[start]: