【问题标题】:Construct an Adjacency List from a List of edges?从边列表构造邻接列表?
【发布时间】:2016-04-10 01:47:07
【问题描述】:

在图算法的上下文中,我们通常会得到一个图的方便表示(通常作为邻接列表或邻接矩阵)进行操作。

我的问题是,从给定的所有边列表构造邻接列表的有效方法是什么?

出于问题的目的,假设边是元组列表(如在 python 中),并且 (a,b) 表示从 a 到 b 的有向边。 em>

【问题讨论】:

    标签: python-2.7 graph graph-algorithm


    【解决方案1】:

    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的所有相邻节点

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 2016-10-15
      相关资源
      最近更新 更多