Python Networkx,使用最短路径生成最短周期
此问题特定于NetworkX。我可以制作自己的函数来完成所有需要的事情,但这需要更长的时间,所以我想避免它 情况: 我有一个未加权图,由NetworkX无向图表示。从这个图中,我寻找“最短循环”——也就是说,对于给定的节点k,我正在寻找最短的简单路径(只通过一个节点一次),它离开k,然后返回k 为了实现这一点,我想使用任何NetworkX最短路径算法,并从节点k到节点k进行搜索。问题是,似乎每个最短路径算法都只返回节点k作为路径。所以,它从未真正离开过。而且,我不知道如何改变这一点 一个可能的解决方案是我要做:Python Networkx,使用最短路径生成最短周期,python,graph,networkx,shortest-path,Python,Graph,Networkx,Shortest Path,此问题特定于NetworkX。我可以制作自己的函数来完成所有需要的事情,但这需要更长的时间,所以我想避免它 情况: 我有一个未加权图,由NetworkX无向图表示。从这个图中,我寻找“最短循环”——也就是说,对于给定的节点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的要求
谢谢。您可以尝试
循环基础
,它试图找到一组构成基础的循环,并选择最小循环:
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))
它是否有必要成为最短路径算法?这难道不是另一种networkx算法吗?如果有另一种networkx算法在这里能很好地工作,但我不知道有哪一种算法能达到同样的效率。