我认识其他人have asked similar questions但这个略有不同。
我需要将距离计算为距离根的权重和节点数的组合。
因此,如果图表是A->20 ft->B->10 ft->C 那么通常您会计算A->B 之间的距离为 20 英尺,A->C 之间的距离为 30 英尺,但我想放大通过另一个节点跳跃的成本。
所以假设每次你跳过另一个节点,成本加倍,所以 A->B 距离是 20 英尺,B->C 距离是 10英尺,但是 A->C 是 20 英尺 + 2*10 英尺 = 40 英尺
boost 的 Dijkstra 最短路径是否可行?
最佳答案
您可以通过自定义距离来做到这一点。
例如,您可以将每条边的成本加倍,但起源于“源”的边除外。它可以通过具有 operator[](edge_descriptor e) const
的简单内联类“即时”实现。然后将此类作为距离图传递给 Dijkstra 或其他最短路径算法。
对于某些应用程序,您希望每个节点的成本都是固定的(例如“红绿灯处的预期加权时间”)。同样,您将这些节点权重保存在某处。然后定义一个内联类,在其 operator[](edge e) const
中添加边权重和此边源权重,除非边从 Dijkstra“源”开始。最后,您将此类的一个对象作为 Dijkstra 距离图传递给您最喜欢的 BGL 例程。
关于c++ - Boost dijkstra_shortest_paths 中的自定义图形距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28775491/