在有向图中反转边缘

时间:2016-04-28 02:43:41

标签: python graph

我有一个边缘字典如下;

edges={vertex1:[(neighbor1,weight1),(n2,w2),...],v2:[(neighbork,weightk).....vk:[(),()]}

有谁知道一种扭转O(E)边缘的方法?我只能想到嵌套的方法,这绝对是不对的。

例如:

{0:[(1,5),(2,3)],1:[(2,2)]} 

是边缘为0-> 1(重量5),0-> 2(重量3),1-> 2(重量2)的图表

逆转后

;

{1:[(0,5)],2:[(0,3),(1,2)]}

是边缘为1> 0(重量5),2-> 0(重量3),2-> 1(重量2)

的图表

1 个答案:

答案 0 :(得分:3)

from collections import defaultdict

g = {0:[(1,5),(2,3)],1:[(2,2)]}
r = defaultdict(list)

for origin, targets in g.iteritems():
    for target, weight in targets:
        r[target].append((origin, weight))

现在r基本上就是你的答案。如果需要,你可以在结尾处dict(r)获得常规字典而不是defaultdict。