【问题标题】:Networkx, using shortest paths to make shortest cyclesNetworkx,使用最短路径做最短周期
【发布时间】:2018-05-07 15:45:45
【问题描述】:

这个问题特定 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 做我想做的事?

谢谢。

【问题讨论】:

  • 是否必须是最短路径算法?不能是另一种networkx算法吗?
  • 如果有另一种 networkx 算法在这里可以很好地工作,但我不知道有一个几乎一样有效。

标签: python graph networkx shortest-path


【解决方案1】:

你可以试试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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 2020-04-29
    • 1970-01-01
    相关资源
    最近更新 更多