繁体   English   中英

给定无向加权连通图,s,t。 找到从s到t的路径,其最大加权边缘尽可能低

[英]Given undirected weighted connected graph, s,t. Find path from s to t that its most weighted edge is low as possible

给定:无向加权连通图。 s,t是顶点。

问题:找到一个尽可能高效的算法,它返回从s到t的路径。 在该路径中,具有最高重量的边缘将具有尽可能最小的重量。 因此,如果我们有来自s,t的5条路径,并且对于每条路径,我们都有最重的边缘,所以这些路径的最小边缘为5。

我尝试过的:

  1. 使用一些算法来找到s和t之间的最短路径。
  2. 删除不属于我们找到的最短路径的所有边
  3. 使用BFS进行一些修改,我们根据从s到t的路径数运行BFS。 每当我们找到最大边并将其存储在数组中时,我们就会找到数组的最小值。

我很难找到一个可以在(1)中运行的算法,Bellman ford将不起作用 - 因为它必须是有向图。 Dijkstra不会工作,因为我们不知道它是否有负圆或负边。 Prim用于寻找MST,我不知道它如何帮助我们找到最短的路径。 有任何想法吗?

除此之外,如果你有一个可以解决这个问题的算法,我将不胜感激。

你可以用Kruskal算法解决这个问题。 像往常一样添加边缘,并在s和t位于同一群集中时立即停止。

我们的想法是,在算法的每个阶段,我们都有效地将所有边缘添加到特定权重阈值以下。 因此,如果s和t在同一簇中,则它们之间存在一条完全由重量小于阈值的边组成的路径。

您可以通过转换为MST问题来解决它,基本上MST中从s到t的路径将是具有最小可能最大权重的路径

  1. 找到图中最负的边缘
  2. 将(重量+ 1)添加到每个边缘。
  3. 现在所有边缘都是正面的,因此您可以应用Dijkstra的算法
  4. 你可以得到源和目的地之间的最短路径
  5. 现在计算源和目标之间的边数(比如x)
  6. 真正的最短路径是:shortest_path - x *(weight + 1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM