编译完上面的单元格后,您应该能够编译下面的单元格并获得所需的输出。
这应该返回36。
基本上是A、B、C、D的边权重相加。有些边被列了两次,如果已经考虑了,我们不应该为这些边添加权重。例如[A,B]和[B,A],因为它们是相同的边等。
这是我到目前为止无法工作的代码:
def infty(graph):
sum = 0
results = []
for a in graph:
for a in a:
results.append(graph[a])
sum = sum + results[a]
print (sum)
如果图是对称的,并且其描述是完整和一致的(即,对于每个权重w_ab
,都有一个相等的w_ba
(:
def infty(g):
return 1 + sum([e[1] for lst in g.values() for e in lst]) / 2
示例:
g = {'A': [['B', 10], ['D', 5]], 'B': [['A', 10], ['C', 5]],
'C': [['B', 5], ['D', 15]], 'D': [['C', 15], ['A', 5]]}
>>> infty(g)
36.0
解释
sum([e[1] for lst in g.values() for e in lst])
是简单的双列表理解(具有两个for
循环的列表理解(- 第一个for循环:
for lst in g.values()
迭代g
(即dict
(的值,例如:[['B', 10], ['D', 5]]
,然后是[['A', 10], ['C', 5]]
,等等( - 第二个for循环:
for e in lst
迭代每个列表lst
中的每个元素,例如['B', 10]
、['D', 5]
等 - 使用CCD_ 14是指每个边缘的权重
Pierre的答案更优雅,但与您的第一个函数类似,这似乎对我有效:
def infty(graph):
sum_ = 0
for node in graph:
for node_2 in graph[node]:
sum_ += node_2[1]
return (sum_)/2 +1
在你的例子中,图是一本字典。节点计数两次,这就是sum_
除以2的原因。这只适用于无向图的情况。