Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Networkx,使用最短路径生成最短周期_Python_Graph_Networkx_Shortest Path - Fatal编程技术网

Python Networkx,使用最短路径生成最短周期

Python Networkx,使用最短路径生成最短周期,python,graph,networkx,shortest-path,Python,Graph,Networkx,Shortest Path,此问题特定于NetworkX。我可以制作自己的函数来完成所有需要的事情,但这需要更长的时间,所以我想避免它 情况: 我有一个未加权图,由NetworkX无向图表示。从这个图中,我寻找“最短循环”——也就是说,对于给定的节点k,我正在寻找最短的简单路径(只通过一个节点一次),它离开k,然后返回k 为了实现这一点,我想使用任何NetworkX最短路径算法,并从节点k到节点k进行搜索。问题是,似乎每个最短路径算法都只返回节点k作为路径。所以,它从未真正离开过。而且,我不知道如何改变这一点 一个可能的解

此问题特定于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算法在这里能很好地工作,但我不知道有哪一种算法能达到同样的效率。