我认识其他人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的最短路径来实现吗?
答案 0 :(得分:1)
您可以通过自定义距离来实现此目的。
例如,您可以将每个边缘的成本加倍,但源自" source"的边缘除外。它可以在飞行中实现"使用具有operator[](edge_descriptor e) const
的简单内联类。然后,您将此类作为距离映射传递给Dijkstra或另一种最短路径算法。
对于某些应用程序,您希望在每个节点上都有固定的成本(例如"在停止灯下的预期加权时间")。在这里,您将这些节点权重保留在某处。然后定义一个内联类,在其operator[](edge e) const
中添加边缘权重和此边缘源权重,除非边缘从Dijkstra" source"开始。最后,将此类的对象作为Dijkstra距离映射传递给您最喜欢的BGL例程。