我正在尝试计算加权顶点的图的最短路径。传统算法如Dijkstra和Floyd-Warshall通常使用加权边,但我没有看到如何将它们应用于我的情况(加权顶点)。我有一个想法是将图转换为具有加权边的更经典视图。这是我收到的结果。在这里,我们有单向和双向加权边,但我仍然不确定哪个算法能够处理以找到最短路径。
G = <V,E>
是一个带有边和顶点权重的有向加权图。构造一个只有边权重的图H = <V',E'>
,方法如下:对于G中的任何节点v
,在H中创建两个节点v_in
和v_out
;添加一条权重等于节点v
在G
中权重的边(v_in -> v_out)
。此外,对于G
中的任何边(u -> w)
,在H中添加一条边(u_out -> w_in)
(新边承载与原始边相同的权重)。H
中添加两个顶点,一个专门用于入边,另一个专门用于出边(还要根据G
中对应顶点的权重连接H
中的新相关节点)。H
。很容易证明,在H
中(s_in,t_out)
之间的最短路径与原始图G
中(s,t)
之间的最短路径相同。H
中的边(v_in,v_out)
时,相应的路径才会通过节点v
在G
中。|V'| = 2|V|
,|E'| = |E| + |V|
。因此,将问题简化不会影响用于查找最短路径的算法的渐近行为。
w(u,v)=W_v
,其中W_v
是节点v
的权重,而w(u,v)
是转换后图中边u->v
的权重。只要没有负权重,Dijkstra 算法就是一个不错的选择。请查看此链接以获取最短路径算法的摘要:https://hackernoon.com/shortest-and-longest-path-algorithms-job-interview-cheatsheet-2adc8e18869 - Ari