Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在图中查找从s到所有顶点的最短路径_Algorithm_Graph_Shortest Path - Fatal编程技术网

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

Algorithm 在图中查找从s到所有顶点的最短路径,algorithm,graph,shortest-path,Algorithm,Graph,Shortest Path,鉴于以下问题: 给定有向图G=(V,E)和权函数W:V→描述一个算法 找到从S到所有其他顶点的最短路径,其中 路径等于所有顶点之和。您需要更改现有算法, 这样就不需要编写新的算法了 请注意,权重函数在顶点上,而不是(!!)在边上。 我的想法是更改Bellman-Ford算法,并将Relax检查更改为以下内容: 1.if d[v]>d[u]+w[u] 1.1 d[v] <<-- d[u]+w[u] 1.2 PI[v] <<-- u 1.如果d[v]>d[u]+

鉴于以下问题:

给定有向图G=(V,E)和权函数W:V→描述一个算法 找到从S到所有其他顶点的最短路径,其中 路径等于所有顶点之和。您需要更改现有算法, 这样就不需要编写新的算法了

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

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

1.1 d[v]让
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]是顶点的最短路径。

我认为这是最好的起点。当然,维基百科今天遭到了抗议:)