这是一般算法问题。我想在无向图上运行一些最短路径算法,其中边和顶点都有与之相关的成本。大多数最短路径寻找算法都不考虑顶点成本。有没有办法来弥补这个问题?
答案 0 :(得分:8)
通过将边缘连接到边缘成本的两个顶点的成本加一半来扩充图形(称为边缘的增加成本)。
然后忽略顶点成本并在增强图上运行普通的最短路径算法。
对于每条路径
v_0 -e_1-> v_1 -e_2-> v_2 -e_2-> ... -e_n-> v_n
增强图中的成本是
(1/2*C(v_0) + C(e_1) + 1/2*C(v_1)) + (1/2*C(v_1) + C(e_2) + 1/2*C(v_2)) + ... + (1/2*C(v_(n-1)) + C(e_n) + 1/2*C(v_n))
= C(v_0) + C(e_1) + C(v_1) + C(e_2) + ... + C(e_n) + C(v_n) - 1/2*(C(v_0 + C(v_n))
因此,增广图中两个顶点a
和b
之间的路径成本是原始图中相同路径的成本减去起始顶点和结束顶点的总成本的一半。
因此,路径是原始图形中的最短路径,只要它是增强图形中的最短路径。