用于在python中查找无向图中的组件的数据结构

时间:2012-02-06 03:56:34

标签: python

来自无向图,表示为一对节点:

edge =(A,B),(B,C),(D,E),(F,E),(G,E),(G,I),(H,G)

在python中找到

组件的最佳数据结构应该是什么

给定起始边缘的特定子图(例如

(d,E))?我正在考虑使用深度优先搜索作为搜索算法。

2 个答案:

答案 0 :(得分:4)

你看过networkx图书馆吗?如果你不是从头开始,它为各种形状和大小的图形提供了很好的基元数据结构。

包含Graph.subgraph方法,您可以在here上阅读。

来自文档:

>>> G = nx.Graph()   # or DiGraph, MultiGraph, MultiDiGraph, etc
>>> G.add_path([0,1,2,3])
>>> H = G.subgraph([0,1,2])
>>> H.edges()
[(0, 1), (1, 2)]

答案 1 :(得分:0)

如果您只想要一个轻量级的数据结构,可以使用双向链接(有效无向)的字典对。

节点结构:

{“name”:“something”,  “连接”:[已连接节点列表]}

您数据中的某些节点:

e = {"name": "E"}
d = {"name": "D"}
f = {"name": "F"}
g = {"name": "G"}

e["connections"] = [d,f,g]
#... etc with whatever code you want to build the graph itself

然后使用您想要的任何算法。如果您想了解算法,请调整您的问题。正如mvanveen所提到的,如果可以,请使用图库。这是一个很好的领域。