【发布时间】:2016-04-10 01:47:07
【问题描述】:
在图算法的上下文中,我们通常会得到一个图的方便表示(通常作为邻接列表或邻接矩阵)进行操作。
我的问题是,从给定的所有边列表构造邻接列表的有效方法是什么?
出于问题的目的,假设边是元组列表(如在 python 中),并且 (a,b) 表示从 a 到 b 的有向边。 em>
【问题讨论】:
标签: python-2.7 graph graph-algorithm
在图算法的上下文中,我们通常会得到一个图的方便表示(通常作为邻接列表或邻接矩阵)进行操作。
我的问题是,从给定的所有边列表构造邻接列表的有效方法是什么?
出于问题的目的,假设边是元组列表(如在 python 中),并且 (a,b) 表示从 a 到 b 的有向边。 em>
【问题讨论】:
标签: python-2.7 graph graph-algorithm
itertools.groupby (docs)、排序和dict 理解的组合可以帮助您入门:
from itertools import groupby
edges = [(1, 2), (2, 3), (1, 3)]
adj = {k: [v[1] for v in g] for k, g in groupby(sorted(edges), lambda e: e[0])}
# adj: {1: [2, 3], 2: [3]}
这会按源节点对边进行排序和分组,并为每个源节点存储list 个目标节点。现在可以通过adj[1]访问1的所有相邻节点
【讨论】: