首页 文章

NetworkX在开始顶点找到DAG中最长路径而没有错误的最有效方法

提问于
浏览
-1

从某个顶点开始,如何找到相对于该顶点的最长路径?我一直在浏览,无法找到这个问题的解决方案,这个问题实际上适用于所有可能的DAG案例 . NetworkX中的源代码是首选,但常规的python也很好 . 我真的很好奇为什么我无法找到任何正确的工作示例,我确实理解这是一个NP型问题,但我想知道它最有效的方式 .

1 回答

  • 0

    首先,我会检查这个图是否已连接 . 如果是,则最长路径是跨所有节点的路径 . 如果不是,则表示该顶点包含在连接的组件中 . 然后我会使用connected_component_subgraphs来找到这个顶点所在的最大组件 . 之后,最长的路径是这个最大组件中所有节点的路径 .

    当然,只有在路径中不允许循环时才有效 .

    import networkx as nx 
    G = nx.DiGraph()  
    G.add_edges_from([(0,1),(0,4),(4,5),(4,6),(5,6),(6,1),(0,2),(2,3),(1,2)])  
    for path in nx.all_simple_paths(G, source=0, target=3):  
        print(path)
    

    结果:

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

    第三个是你喜欢的 .

相关问题