我是使用 NetworkX 的初学者,我正在尝试找到一种方法来检测哪些节点彼此之间的距离为 x。我已经开始使用这个算法来获取所有对
path=nx.all_pairs_dijkstra_path(G)
但我仍然不确定如何使用 for 循环检测节点之间的距离。
我将不胜感激任何帮助。谢谢
原文由 michaelI 发布,翻译遵循 CC BY-SA 4.0 许可协议
我是使用 NetworkX 的初学者,我正在尝试找到一种方法来检测哪些节点彼此之间的距离为 x。我已经开始使用这个算法来获取所有对
path=nx.all_pairs_dijkstra_path(G)
但我仍然不确定如何使用 for 循环检测节点之间的距离。
我将不胜感激任何帮助。谢谢
原文由 michaelI 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是找到节点之间距离的一种解决方案:
G = nx.Graph()
G.add_edges_from([(1,2), (1,3), (2,3), (2,4), (3,4)])
path = nx.all_pairs_shortest_path_length(G) # This is a generator
dpath = {x[0]:x[1] for x in path} # Create a dictionary from it
# To find e.g. the distance between node 1 and node 4:
print(dpath[1][4]) # = 2
原文由 Apostolos 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
NetworkX 有自动计算加权和未加权图的最短路径(或只是路径长度)的方法。确保针对您的用例使用正确的方法。
networkx.all_pairs_shortest_path - 计算 未加权 图中所有节点之间的最短路径
networkx.all_pairs_shortest_path_length - 计算 未加权 图中所有节点之间的最短路径的长度
networkx.all_pairs_dijkstra_path - 计算 加权 图中所有节点之间的最短路径
networkx.all_pairs_dijkstra_path_length - 计算 加权 图中所有节点之间的最短路径的长度
当在图上执行时,这些方法中的每一个都会计算节点的字典矩阵(“字典的字典”),这些节点具有相应的最短路径或最短路径的长度作为值。我将用一个例子来证明这一点:
如您所见,我生成了一个包含五个节点的图,并使用一条边将每个节点链接到下一个节点。我在 --- 中存储了一个最短路径矩阵,在
sp
spl
存储了一个最短路径长度矩阵。当我需要知道两个节点之间的最短路径时,例如节点"A"
和节点"E"
,我只需访问sp
:sp["A"]["E"]
。然后它将返回两个节点之间的整个最短路径。最短路径长度的方法以类似的方式工作,但它只会返回任意两个给定节点之间的边数。下一个代码片段可能会更清楚地说明字典矩阵的含义。如果我为节点
"A"
请求sp
中的所有条目,它会返回另一个字典,其中包含每个其他节点的条目:如果您想通过使用
for
循环检查所有节点之间的距离,您可以迭代矩阵的第一个字典的键,然后迭代该字典内的字典。这比听起来容易: