如何在这个简单的图中找到某个节点的所有传入弧/边

时间:2016-05-13 09:20:56

标签: python graph nodes edges

我正在阅读有关如何实施图表的https://www.python.org/doc/essays/graphs/。问题是,我对如何以最快的方式找到某个节点的所有传入弧感到困惑。

graph = {'A': ['B', 'C'],
             'B': ['C', 'D'],
             'C': ['D'],
             'D': ['C'],
             'E': ['F'],
             'F': ['C']}

我知道节点C有来自节点A,B,D,F的弧线。问题是:如何检查节点A,B,D,F而不进入密钥字典中的每个列表以查看它是否包含C.是否有更好的方法来执行此操作或更高效的图形和方法?有人可以指出我正确的方向,提前谢谢。

1 个答案:

答案 0 :(得分:1)

只需使用set结构

,就可以获得类似于邻接矩阵的东西
graph = {'A': {'B', 'C'},  # If you're using python 2.7+ you can initalize a set like this
         'B': {'C', 'D'},
         'C': {'D'},
         'D': {'C'},
         'E': set(['F']),  # Set initialization pre-2.7
         'F': set()}       # Empty set initialization, can't use {}

然后,您可以检查target事件的节点,如:

[pointsFrom for (pointsFrom, pointsTo) in graph.items() if target in pointsTo]

这将使图表中的节点数具有线性运行时间。