我正在寻找解决最短路径问题的最佳方法:
我有一个带有未加权边缘的有向图。如果存在这样的路径,我需要能够找到任意两个节点之间的最短路径。使这个问题与常规最短路径问题不同的是:如果存在具有最短长度的多个路径,我需要能够选择具有最高“权限”的路径。
每个节点都有一个数字权限,具有最高权限的路径只是具有最高节点权限总和的路径。
总结: 我需要有向图中一对节点之间的最短路径,但如果有多条路径具有相同的最小长度,我需要找到具有最高路径权限的路径。
这样做的最佳方法是什么?有没有办法将其转换为加权图,然后只使用Dijkstra's algorithm?有没有办法修改breadth-first search给我一组最短路径,然后我可以迭代找到最高权限路径?
答案 0 :(得分:5)
边缘未加权,因此给eacn边缘加权1+auth(v,u)
。 [auth在以下行中解释]
对于每个(v,u)集合auth(v,u) = max{authority} - authority(v)
(*)[如果你使用从v
离开的边缘,这是真的,你绝对访问它了。“
(*)max{authority}
是图表中的最高权限。
将你的“auth rank”标准化为Sigma(auth(v,u),for each (v,u) in E) < 1
[通过除法,因此边缘的权限仍将与原始版本成比例]
现在,使用新修改的权重在图表上运行dijkstra。
找到的最短路径必须最短,因为权威因素无法克服距离因素,因为它是“弱”[归一化到小于1]。
它是最高authority
[对于顶点]的那个,因为它是auth
[对于边缘]最低的那个,因为它是最小的。
答案 1 :(得分:1)
没有关于Djikstra算法的任何内容强迫您使用标量来表示路径成本。
一个简单的修改就是使用一对而不是一个值,例如(distance, authority)
代表路径的费用。排序为< distance
,然后是> authority
,即较低的distance
优先级较高,而较高的authority
优先。