来自无向图,表示为一对节点:
edge =(A,B),(B,C),(D,E),(F,E),(G,E),(G,I),(H,G)
在python中找到
组件的最佳数据结构应该是什么给定起始边缘的特定子图(例如
(d,E))?我正在考虑使用深度优先搜索作为搜索算法。
答案 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所提到的,如果可以,请使用图库。这是一个很好的领域。