使用networkx生成完整的DFS路径

问题描述 投票:0回答:1

我正在尝试生成完整的路径列表,而不是优化的路径列表。使用下面的示例可以更好地解释。

import networkx as nx
G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2), (2, 3)])
G.add_edges_from([(0, 1), (1, 2), (2, 4)])
G.add_edges_from([(0, 5), (5, 6)])

上面的代码创建一个具有边0=>1=>2=>30=>1=>2=>40=>5=>6的图

我只想从0中提取所有路径。

我尝试过:

>> list(nx.dfs_edges(G, 0))
[(0, 1), (1, 2), (2, 3), (2, 4), (0, 5), (5, 6)]

我想要的是:

[(0, 1, 2, 3), (0, 1, 2, 4), (0, 5, 6)]

networkx中有没有可以使用的预先存在的方法?如果没有,有什么方法可以写出可以完成这项工作的最佳方法?

:我的问题仅限于给定的示例。没有更多的极端情况。

Note2:为简化起见,生成了数据。在我的情况下,边缘列表来自数据集。假设有一个图和一个节点(说0),我们可以生成所有路径吗?

python networkx depth-first-search
1个回答
0
投票

尝试一下:

import networkx as nx

G = nx.Graph()
G.add_edges_from([(0, 1), (1, 2), (2, 3)])
G.add_edges_from([(0, 1), (1, 2), (2, 4)])
G.add_edges_from([(0, 5), (5, 6)])

pathes = []

path = [0]
for edge in nx.dfs_edges(G, 0):
    if edge[0] == path[-1]:
        # node of path
        path.append(edge[1])
    else:
        # new path
        pathes.append(path)
        search_index = 2
        while search_index <= len(path):
            if edge[0] == path[-search_index]:
                path = path[:-search_index + 1] + [edge[1]]
                break
            search_index += 1
        else:
            raise Exception("Wrong path structure?", path, edge)
# append last path
pathes.append(path)
print(pathes)
# [[0, 1, 2, 3], [0, 1, 2, 4], [0, 5, 6]]
© www.soinside.com 2019 - 2024. All rights reserved.