两个节点之间所有最短路径列表中的最大值
Max from a list of all shortest paths between two nodes
我有一个无向图
我想从网络中两个节点之间的所有最短路径长度的列表中计算最大值,有什么办法可以做到吗?
我想你想要图形直径,它是所有对最短路径中的最大值。
https://networkx.github.io/documentation/latest/reference/generated/networkx.algorithms.distance_measures.diameter.html
如果您只想考虑源和目标的某些顶点子集,您可以这样做:
# Change these to fit your needs
sources = G.nodes() # For example, sources = [0,1,4]
targets = G.nodes()
max_shortest_path = None
for (s,t) in itertools.product(sources, targets):
if s == t: continue # Ignore
shortest_paths = list(nx.all_shortest_paths(G, s, t))
path_len = len(shortest_paths[0])
if max_shortest_path is None or path_len > len(max_shortest_path[0]):
max_shortest_path = list(shortest_paths) # Copy shortest_paths list
elif path_len == len(max_shortest_path[0]):
max_shortest_path.extend(shortest_paths)
之后,max_shortest_path
是一个列表。 max_shortest_path
的所有元素都是等长列表。
len(max_shortest_path[0])
将为您提供图中最大最短路径的 长度。
max_shortest_path
的元素就是这个长度的路径
我有一个无向图
我想从网络中两个节点之间的所有最短路径长度的列表中计算最大值,有什么办法可以做到吗?
我想你想要图形直径,它是所有对最短路径中的最大值。 https://networkx.github.io/documentation/latest/reference/generated/networkx.algorithms.distance_measures.diameter.html
如果您只想考虑源和目标的某些顶点子集,您可以这样做:
# Change these to fit your needs
sources = G.nodes() # For example, sources = [0,1,4]
targets = G.nodes()
max_shortest_path = None
for (s,t) in itertools.product(sources, targets):
if s == t: continue # Ignore
shortest_paths = list(nx.all_shortest_paths(G, s, t))
path_len = len(shortest_paths[0])
if max_shortest_path is None or path_len > len(max_shortest_path[0]):
max_shortest_path = list(shortest_paths) # Copy shortest_paths list
elif path_len == len(max_shortest_path[0]):
max_shortest_path.extend(shortest_paths)
之后,max_shortest_path
是一个列表。 max_shortest_path
的所有元素都是等长列表。
len(max_shortest_path[0])
将为您提供图中最大最短路径的 长度。
max_shortest_path
的元素就是这个长度的路径