【问题标题】:Generate Complete DFS Paths using networkx使用 networkx 生成完整的 DFS 路径
【发布时间】:2020-03-11 06:47:25
【问题描述】:

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

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的Graph

我只想从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 的现有方法可以使用?如果没有,有什么方法可以编写出可以完成这项工作的最佳方法?

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

注意2:为简化起见,生成数据。就我而言,边缘列表来自数据集。假设给定一个图和一个节点(比如0),我们可以生成所有路径吗?

【问题讨论】:

    标签: python networkx depth-first-search


    【解决方案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)])
    
    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]]
    

    【讨论】:

      猜你喜欢
      • 2019-07-21
      • 2021-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 2020-04-21
      • 2017-03-16
      相关资源
      最近更新 更多