微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 DIRECTED networkx 图中查找多条路径

如何解决在 DIRECTED networkx 图中查找多条路径

我有一个有向图如下:

enter image description here

我用 networkx 创建它并用 ipycytoscape 绘制它。 该图是有向图。所有的边都只有一个方向。

问题是如何从特定节点找到该节点和节点一之间的所有路径。由于图是有向的,因此只有所有边的方向都相同的路径才是有效的。在图中,6 和 1 之间有两条路径。乍一看,可能会想到蓝色路径,但在这种情况下,边缘 4-6 的方向与其他边缘不同。

nodes = [1,2,3,4,5,6,7,8]
children = [[2],[3,4],[5,6],[6,7],[8],[],[]]
G2 = nx.Graph()
G2.add_nodes_from(nodes)
for i,child in enumerate(children):
    for c in child:
        G2.add_edge(i+1,c)
cyto = CytoscapeWidget()
cyto.graph.add_graph_from_networkx(G2,directed=True)
cyto.set_layout(name='dagre',nodeSpacing=10,edgeLengthVal=10)
display(cyto)

我正在寻找的是网络方法,它为我提供了两个节点之间的路径列表。 伪代码

for node1 in G.nodes:
for node2 in G.nodes:
list_of_paths = networks_method???(node1,node2)

注意:图中的箭头(方向性)总是从较小的数字到较大的数字。 2 可以是 3 的父级,但不能反过来。

解决方法

通常,找到“所有路径”的问题可能是一项指数任务,并产生无限路径。 但是,您从有向图的一个特殊子类中描述了一个图:有向无环图 (DAG)。 DAG 是一个没有循环的有向图 G,即对于 u 中的节点 G 不存在路径 u->v_1....v_n->u。 由于您说所有边都从较小的数字变为较大的数字,因此您的图是 DAG。

在这种情况下,修改后的 DFS 搜索将为您提供所有可能的路径。 “DAG 中的所有路径”主题已经在以下问题中讨论过

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。