我只需要了解如何在称重的有向图中找到两个顶点之间的所有最小成本行走。我不知道有任何算法可以做到这一点。我正在考虑使用和算法以最低的成本找到步行,然后修改顶点的权重,这样如果我再次运行它,它将被迫在下次给我另一条路径。但是,如果新walk使用将要修改的边缘,则无效。
答案 0 :(得分:1)
只需使用您最喜欢的最短路径算法并修改放松操作,以便更新到目标节点的最短路径数:
# initialization
count(src) = 1
dis(src) = 0
dis(v) = infinity forall v != src
relax(e = (v,w,c)):
cdis = dis(v) + c
if cdis < dis(w):
dis(w) = cdis
count(w) = count(v)
else if cdis == dis(w)
count(w) += count(v)
在算法结束时,count(dst)
将是从源到dst
的路径数。
显然,在存在零重量周期的情况下,你必须考虑顶点之间存在无限多条不同路径的特殊情况。