鉴于以下问题:
给定有效函数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
我认为这不够好,任何想法可能是什么问题?
谢谢,罗恩答案 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是最好的起点。当然,维基百科今天也在抗议:)。