在图表中找到从s到所有顶点的最短路径

时间:2012-01-18 11:36:13

标签: algorithm graph shortest-path

鉴于以下问题:

  

给定有效函数W:V→R的有向图G =(V,E),描述算法   找到从S到所有其他顶点的最短路径,其中长度为   path等于所有顶点的SUM。您需要更改现有算法,   为了做到这一点,所以不需要编写新的算法。

请注意,重量函数位于顶点上,而不是边缘上的(!!)。 我想的是改变Bellman-Ford算法并将Relax检查更改为以下内容:

1.if d[v]>d[u]+w[u]
 1.1 d[v] <<--  d[u]+w[u]
 1.2 PI[v] <<-- u

我认为这不够好,任何想法可能是什么问题?

谢谢,罗恩

2 个答案:

答案 0 :(得分:2)

w:V->R成为你的体重函数。

创建一个加强函数:w':E->R,如下所示:w'(u,v) = w(v)

用w'运行dijkstra / bellman-ford。根据w',让d'[v]成为v的最小路径权重。

然后,如果最短路径为s->u1->u2->...->un->v,则得到:d'[v] = w'(s,u1) + w'(u1,u2) + ... + w'(un,v) [dijkstra / bellman fofrd的正确性],因此d'[v] = w(u1) + w(u2) + ... + w(un) + w(v) [根据w'的定义]。

所以,总的来说,得到:d[v] = w(s) d'[v]和d [v]是顶点的最短路径。

答案 1 :(得分:0)

我认为Floyd–Warshall_algorithm是最好的起点。当然,维基百科今天也在抗议:)。