我正在计算常规网络中任意两个节点之间的所有可能的最短路径。如果网络已连接(例如,最大组件=整个网络),我就没有问题。
当我断开组件连接时,就会出现问题:鉴于节点 n
和节点 j
之间没有路径,则会出现 NetworkXNoPath
错误提出。
我的问题: 我想跳过所有未连接的节点对。我知道我需要一个 if
来检查存在引发的错误,但我不知道如何将其添加到我的代码中。
我的用于计算图中任意两个节点之间所有可能的最短路径的代码:
import networkx as nx
counts=OrderedDict()
for n in F.nodes(): counts[n]=0
for n in F.nodes():
for j in F.nodes():
if (n!=j):
gener=nx.all_shortest_paths(F,source=n,target=j)
for p in gener:
for v in p: counts[v]+=1
回顾一下:我可以使用nx.bi Direction_dijkstra(F, n, j)
来检查节点n
之间是否存在边> 和节点 j
,如果缺少这样的边,它会引发 NetworkXNoPath
错误,但如何检查此错误以便跳过一对未连接的节点?
最佳答案
只需对每个连接的组件进行计算即可。检查两个节点之间是否不存在路径的测试成本可能很高。
connected_components = nx.connected_component_subgraphs(G)
for component in connected_components:
#your code here.
关于Python:图的断开组件中的所有最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37070222/