首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据选择的边选择最短路径?

如何根据选择的边选择最短路径?
EN

Stack Overflow用户
提问于 2019-11-14 18:18:01
回答 1查看 326关注 0票数 0

我正在使用NetowrkX和OsmnX Python包来分析道路网络。一旦我得到了简化的图,我想通过最短路径计算来评估网络的性能。为了获得特定的索引,我需要包括选定的边的最短路径的长度,这些边是通过高速公路边的最短路径。

首先,我列出了我感兴趣的高速公路边(G5是我的网络的对应图):

代码语言:javascript
运行
复制
MW_edges=[(u,v,k,d) for u,v,k,d in G5.edges(keys=True, data=True) if  d['highway']=='motorway']

我使用以下函数来评估网络中所有节点对的最短路径:

代码语言:javascript
运行
复制
paths=dict(nx.all_pairs_dijkstra_path(G5, cutoff=None, weight='length'))

如何获取/提取包括高速公路边在内的所需最短路径?

EN

回答 1

Stack Overflow用户

发布于 2019-11-14 19:01:06

我无法访问您的图表或类似它的玩具示例,加上我不知道它到底是什么,你想要的。主要有:

  • 图形是否有权重?你使用dijkstra的事实让我认为它是,但是你使用的是公路网,这让我认为它不是。
  • ,你的目标是什么?在给定两个节点(假设是sourcetarget)的情况下,您是否希望获得构成它们之间最短路径的节点?或者您想要所有节点对的所有最短路径?有不同的函数针对这些事情进行了优化。

我做了一个玩具示例,在给定两个节点的情况下,算法返回组成它们之间最短路径的节点。找到边就很简单了(只需从返回的列表中连续选择成对的节点即可):

代码语言:javascript
运行
复制
import networkx as nx
import matplotlib.pyplot as plt

nodes = [i for i in range(10)]
edges = [(i, i+1) for i in range(len(nodes)-1)] + [(nodes[0], nodes[-1])] + [(nodes[4], nodes[8])]
G = nx.Graph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)

source, target = 4, 9
print("Shortest path between nodes {} and {} = {}"
      .format(source, target, nx.bidirectional_shortest_path(G, source, destination)))

nx.draw_networkx(G)

我离开了绘制线,以帮助更好地可视化事物。我还建议您查看文档here,以便更好地了解哪种算法更适合您的用例。

如果我误解了什么,请纠正我!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58854347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档