我有一个无向图,比如:
import igraph as ig
G = ig.Graph()
G.add_vertices(9)
G.add_edges([(0,1), (1,2),(2,3),(3,0),(0,4),(4,5),(5,6),(6,7),(6,8)])
有一个从节点0经由1、2、3返回0的“循环路径”(抱歉,在pic中,nodelabels从1开始,而不是从0开始)
对于赋值,我需要标识“循环路径”连接到图的其余部分的节点,即0
,最重要的是“循环路径”本身,即[0,1,2,3,0]
和/或{
我在努力,但真的没有头绪。如果我使用来自here的函数,就像find_all_paths(G,0,0)
,我当然只能得到[0]
好吧,这是我自己问题的答案之一:
多亏了Max Li's和{a2}的帮助,我想到了重写{a3}以在python图形中工作的想法:
下面是一个使用广度优先搜索查找循环的示例。我想知道是否有更有效的方法。即使是中等大的图,或者更长的最大循环长度,这可能会运行很长时间。深度优先搜索也可以做到这一点。首先,我相信您是用
R
发布了这个问题,所以请在下面找到R
版本。由于同样的原因,python
版本并不是完全的python,正如我快速从R
翻译过来的那样。 有关解释,请参见代码中的注释。在在
^{pr2}$R
中相同:因为这个问题也是用networkx标记的,所以我用它来举例说明代码。在
在图论中,“循环路径”通常称为圈。在
我看到的最简单(可能不是最快的)想法是找到循环和连接点集(或切割顶点,即增加连接组件数量的点),然后它们的交集就是解决方案。在
在相同的基础上开始:
现在问题的解决方案是:
^{pr2}$相关问题 更多 >
编程相关推荐