Networkx,使用最短路径进行最短周期

时间:2018-05-07 15:45:46

标签: python graph networkx shortest-path

这个问题是特定的到NetworkX。我可以创建自己的函数来完成我需要的所有东西,但这需要更长的时间,所以我想避免它。

情况:

我有一个未加权的图表,由NetworkX Undirected Graph表示。从这张图中,我寻找"最短周期" - 也就是说,对于给定的节点k,我找到最短的简单路径(只通过一个节点一次),离开k然后返回k。

为实现这一目标,我想使用任何NetworkX最短路径算法,并从节点k到节点k进行搜索。问题是,似乎每个最短路径算法只返回节点k作为路径。所以,它实际上永远不会离开。而且,我不知道如何改变它。

我可以做一个可能的解决方案:

for each edge from k
    disconnect that edge
    do shortest path from the other side of that edge to k
    reconnect that edge

然而,我计划这么做的次数很多"最短的周期"技术是非常巨大的,我宁愿不必这样做。那么,有没有更简单的方法来做我想要的NetworkX?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以尝试cycle_basis,它会尝试找到一组形成基础的循环并选择最小循环:

import networkx as nx

g = nx.Graph()
g.add_nodes_from([1,2,3,4,5,6,7])
g.add_edges_from([(1,2), (1,3), (2,4), (2,7), (3,5), (6,7), (5,6), (1,5), (3,4)])

min(nx.cycle_basis(g, 1), key=lambda cycle: len(cycle))