networkx MultiDiGraph 边的访问键使得最短路径
networkx MultiDiGraph access keys of edges making the shortest path
使用 networkx 库,我定义了一个 MultDiGraph。然后我计算两个给定节点之间的最短路径。由于我的图形包含平行边,我想知道构成最短路径的边的 keys。这是一个例子:
import networkx as nx
G = nx.MultiDiGraph()
G.add_edge('a', 'b', key=0, weight=1)
G.add_edge('a', 'b', key=1, weight=2)
G.add_edge('b', 'c', key=0, weight=1)
shortest_path = nx.shortest_path(G, source='a', target='c')
shortest_path_length = nx.shortest_path_length(G, source='a', target='c')
print(shortest_path)
print(shortest_path_length)
结果如下所示:
['a', 'b', 'c']
2
这仅在节点 'a' 和 'b' 之间的最短路径是通过 key=0(权重=1)时才是正确的。我在文档中找不到任何内容可以让我检索最短路径中涉及的实际边的键。我怎样才能得到这些信息?
简短的回答是你不能。 Networkx
没有 return 构成最短路径的边的功能。它最多可以 return 最短路径中的节点。
解决这个问题的方法是假设最短路径中的边是最短的边,因此如果路径中的两个节点可以形成键为 1 或 0 的边,则假设它是最短的.
我遇到了和你一样的问题:
我使用了一个名为 OSMNx 的库,我想要的功能需要知道哪些边是最短路径。该功能做出与我上面所述相同的假设(您可以看到问题的答案)
使用 networkx 库,我定义了一个 MultDiGraph。然后我计算两个给定节点之间的最短路径。由于我的图形包含平行边,我想知道构成最短路径的边的 keys。这是一个例子:
import networkx as nx
G = nx.MultiDiGraph()
G.add_edge('a', 'b', key=0, weight=1)
G.add_edge('a', 'b', key=1, weight=2)
G.add_edge('b', 'c', key=0, weight=1)
shortest_path = nx.shortest_path(G, source='a', target='c')
shortest_path_length = nx.shortest_path_length(G, source='a', target='c')
print(shortest_path)
print(shortest_path_length)
结果如下所示:
['a', 'b', 'c']
2
这仅在节点 'a' 和 'b' 之间的最短路径是通过 key=0(权重=1)时才是正确的。我在文档中找不到任何内容可以让我检索最短路径中涉及的实际边的键。我怎样才能得到这些信息?
简短的回答是你不能。 Networkx
没有 return 构成最短路径的边的功能。它最多可以 return 最短路径中的节点。
解决这个问题的方法是假设最短路径中的边是最短的边,因此如果路径中的两个节点可以形成键为 1 或 0 的边,则假设它是最短的.
我遇到了和你一样的问题:
我使用了一个名为 OSMNx 的库,我想要的功能需要知道哪些边是最短路径。该功能做出与我上面所述相同的假设(您可以看到问题的答案)