这是一个通用算法问题。我想在无向图上运行一些最短路径算法,其中边和顶点都有与其相关的成本。大多数最短路径搜索算法不考虑顶点成本。有什么方法可以弥补这个问题吗?具有顶点和边缘成本的最短路径算法
回答
通过将边缘连接到边缘的两个顶点的成本的一半加起来(称为边缘的增加成本)来增加图形。
然后忽略顶点成本并在增广图上运行普通最短路径算法。
对于每个路径
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
之间的路径的成本是相同的成本原始图中的路径减去开始和结束顶点的总成本的一半。
因此,路径是原始图中的最短路径,当且仅当它是增广图中的最短路径时。
+1为优雅的解决方案。 –
+1真的很棒! – Chasefornone
在S. Skiena的算法设计手册中提到,如果给出一个图的权重位于顶点而不是边的图,我们可以将有向边(i,j)的代价视为顶点的代价学家然后,通过运行Dijkstra算法解决问题我们是否可以在这个问题中采用相同的方法?我不清楚为什么我们应该增加每个顶点的一半成本。 –
- 1. 最有效的最短路径算法非负边缘图
- 2. 穿过某些边缘的最短路径算法
- 3. K负边缘 - 单源最短路径
- 4. Dijkstra的算法 - 只有负成本的DAG最短路径
- 5. 边缘预算最大简单路径
- 6. 最短路径tsp算法
- 7. 最短路径算法
- 8. 黄色和黑色边缘的最短路径
- 9. 最短成本路径
- 10. 的最短路径上最重要的边缘
- 11. 概率和最短路径算法
- 12. 图中不应该是边的边的顶点之间的最短路径
- 13. 算法:所有点之间的最短路径
- 14. 最佳最短路径算法
- 15. Eppstein的算法和Yen的k最短路径算法
- 16. 最短路径:标识导致负循环的边缘
- 17. 在OrientDB的最短路径中获取边缘()
- 18. 寻找排除特定边缘的最短路径?
- 19. 删除边缘后对最短路径的影响
- 20. 边缘权重加倍的最短路径每个其他跳
- 21. URL的最短路径算法
- 22. AFP Dijkstra的最短路径算法
- 23. dijkstra的最短路径算法回溯?
- 24. Dijsktra的最短路径算法
- 25. Dijkstra找到最短路径的算法?
- 26. 使用Dijkstra算法的最短路径
- 27. Dijkstra的最短路径算法修改
- 28. 基于类的最短路径算法
- 29. Floyd的最短路径算法C++
- 30. 在android中的最短路径算法
对于每个边,将相应顶点的一半成本添加到边成本,然后忽略顶点成本。 –
它不会夸大顶点的成本吗?如果一个顶点有4个连接到它的边,则该顶点的成本将被添加2次。 –
看看Prim的算法。 – user1929959