我有加权图。 我想找到从节点S到节点E的最佳路径,以便该路径内的最大单边权重尽可能小。
例如:
S -> E (w=40)
S -> A (w=30)
A -> E (w=20)
对于该图,djikstra将计算最短路径为S-> E,成本为40.我想要的是S-> A-> E(成本最大值(30,20)= 30 )。
是否有可能以这种方式修改dijkstra? 或者是否有任何已知的算法可以实现这一目标?
答案 0 :(得分:1)
解决此问题的方法是改变从优先级队列/堆中存储距离(比较值)的方式,否则结构将保持与Dijkstra类似。您将迄今为止存储在构造路径中的最大重量而不是总距离。这样,在您的优先级队列中,您将首先按顺序排列最小的队列。
所以在你给出的例子中,它将以S - >开头。 A因为w为30,而另一个为40.在第二次执行中,它将转到w = 20,其中A - > E因为Math.max(20,30)是< 40,所以它将被存储在优先队列/堆之前。
一旦到达目的地,那么该路径将保证最少。希望这是有道理的!
答案 1 :(得分:0)
您可以使用贪婪算法变体:
1)删除所有边缘,并先用min对边缘进行排序。
2)按照从最小到最大的顺序向图中添加边,直到从源节点到目标节点的路径为止。那条路是你要找的路。