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

在python中查找无向图中的组件的数据结构,python,Python,中的无向图表示为一对节点: 边=(A,B),(B,C),(D,E),(F,E),(G,E),(G,I),(H,G) python中最好的数据结构应该是什么来查找 给定起始边的特定子图(例如 (D,E))?。我正在考虑使用深度优先搜索作为搜索算法。你查过图书馆了吗?如果您不是从头开始,它为各种形状和大小的图形提供了非常好的基本数据结构 包括Graph.subgraph方法,您可以在上面阅读 从文档中: >>> G = nx.Graph() # or DiGraph, Mult

中的无向图表示为一对节点:

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

python中最好的数据结构应该是什么来查找

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

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

你查过图书馆了吗?如果您不是从头开始,它为各种形状和大小的图形提供了非常好的基本数据结构

包括
Graph.subgraph
方法,您可以在上面阅读

从文档中:

>>> 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)]
你查过图书馆了吗?如果您不是从头开始,它为各种形状和大小的图形提供了非常好的基本数据结构

包括
Graph.subgraph
方法,您可以在上面阅读

从文档中:

>>> 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)]

如果您只是想要一个轻量级的数据结构,那么可以使用一对双链接(实际上是无方向的)字典

节点结构:

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
{“name”:“某物”, “连接”:[连接节点列表]}

数据中的某些节点:

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所提到的,如果可以,请使用图形库。这是一个很好的解决方案。

如果您只想要一个轻量级的数据结构,您可以使用一对双链接(实际上是无方向的)字典

节点结构:

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
{“name”:“某物”, “连接”:[连接节点列表]}

数据中的某些节点:

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所提到的,如果可以,请使用图形库。这很好。

您使用的是networkx之类的库吗?或者只是python?您使用的是networkx之类的库吗?或者仅仅是python?我真正想要的是找到给定起始节点的特定子图的连通性。这对节点集:边=(A,B),(B,C),(D,E),(F,E),(G,E),(G,I),(H,G)实际上代表两棵独立的树。我想使用递归dfs来查找连接的组件。我尝试使用以下形式的字典:{'A':['B']..},但这些代表有向图,我有的是没有方向的边。我真正想要的是找到给定起始节点的特定子图的连通性。这对节点集:边=(A,B),(B,C),(D,E),(F,E),(G,E),(G,I),(H,G)实际上代表两棵独立的树。我想使用递归dfs来查找连接的组件。我尝试使用以下形式的字典:{'A':['B']..},但这些代表有向图,我有的是没有方向的边。我希望避免使用特定的图形库。那么您需要算法还是只需要数据结构?对不起,我还是不清楚。至于我提出的结构,除非我误解了什么,否则每一条边都是无向的和每一条边都是一对有向边的图之间没有实际的区别。另外,避免使用mvanveen建议的库的原因是什么?也许你想先自己学习如何做呢?我有一些C语言的代码,可以在python中用于dfs算法,我需要的是如何在python中表示边缘(一个简单的列表?一个字典?)。是的,我想先学习如何做,然后我可能会使用更通用的库。如果你已经有了python中的算法,这可能也会有所帮助。我真正想要的是找到给定起始节点的特定子图的连通性。这对节点集:边=(A,B),(B,C),(D,E),(F,E),(G,E),(G,I),(H,G)实际上代表两棵独立的树。我想使用递归dfs来查找连接的组件。我尝试使用以下形式的字典:{'A':['B']..},但这些代表有向图,我有的是没有方向的边。我真正想要的是找到给定起始节点的特定子图的连通性。这对节点集:边=(A,B),(B,C),(D,E),(F,E),(G,E),(G,I),(H,G)实际上代表两棵独立的树。我想使用递归dfs来查找连接的组件。我尝试使用以下形式的字典:{'A':['B']..},但这些代表有向图,我有的是没有方向的边。我希望避免使用特定的图形库。那么您需要算法还是只需要数据结构?对不起,我还是不清楚。至于我提出的结构,除非我误解了什么,否则每一条边都是无向的和每一条边都是一对有向边的图之间没有实际的区别。另外,避免使用mvanveen建议的库的原因是什么?也许你想先自己学习如何做呢?我有一些C语言的代码,可以在python中用于dfs算法,我需要的是如何在python中表示边缘(一个简单的列表?一个字典?)。是的,我想先学习如何做,然后我可能会使用更通用的库。如果您已经有了python中的算法,这可能也会有所帮助。