algorithm - 两个顶点之间的最小成本的不同行走的数量

标签 algorithm graph

我只需要一个想法,如何找到加权有向图中两个顶点之间的所有最小成本行走。我不知道有什么算法可以做到这一点。我正在考虑使用算法来找到成本最低的步行,然后修改顶点的权重,这样如果我再次运行它,它将被迫下次给我另一条路径。但是,如果新的行走使用将要修改的边缘,则此方法将不起作用。

最佳答案

只需使用您最喜欢的最短路径算法并修改relax操作,以便它更新到目标节点的最短路径数量:

# 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 的路径数。

显然,在存在零权重循环的情况下,您必须考虑顶点之间存在无限多个不同路径的特殊情况。

关于algorithm - 两个顶点之间的最小成本的不同行走的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20219270/

相关文章:

algorithm - k表示聚类样本数据

algorithm - 没有列表功能的 Haskell foldWhile 或 reduceWhile?

c - 不同情况下的并集查找操作

javascript - 我如何才能在两行中显示每行不同字体大小的标题?

plot - gnuplot - 偏移 xtics

algorithm - 如何按顺时针/逆时针方向对所有多边形点进行排序?

c# - 需要添加2个数字的代码

algorithm - 计算包含特定边集的生成树总数

c++ - C++中无向图中的连接组件

sql-server-2008 - 在sql server 2008中是否有在hierarchyid中存储社交网络图的例子