![](/img/trans.png)
[英]How to find the shortest path cover a specific set of edges in a weighted undirected graph?
[英]Given a set of edges and an undirected graph, how do I pick the best edge to add to graph to minimize the shortest path?
我在想的是,对于我可以从中挑选的一组边中的每条边,构建一个插入该边的图形副本,然后运行 Dijkstra's。 最好的边缘最终将来自总权重最低的图表。
但这似乎效率低下。 我必须为集合中的每一条边都调用 Dijkstra。 有一个更好的方法吗?
在修改后的图形上运行 Djikstra。 该图将包括原始图的所有顶点和边。 两次。
对于每个顶点 i,创建一个顶点 i'。 如果存在边 (u,v),则创建边 (u',v')。 因此,除了 's 之外,我们有两个看起来相同的图表。
现在魔术来了:
在此图上运行 Djikstra 将为您提供最短路径,包括快捷方式。 为什么?
因此,如果 Djikstra 在这个修改后的图中找到了一条路径,我们就有了新的最短路径,它将快捷方式带入帐户。
由此产生的复杂性由 Djikstra 给出,并且由于我们只在混合中添加了 E + len(shortcuts) 边缘,因此与原始 Djikstra 相比,O-notation 没有任何改变。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.